Avatar billede faxekondi Nybegynder
30. september 2006 - 14:27 Der er 5 kommentarer og
1 løsning

Parameter har ingen standard værdi?

Hej alle

Jeg er ved at lave et online booking system hvor jeg pt. gemmer de indtastede data i cache og vil hente dem ud igen når jeg skal gemme en booking men jeg får fejlen "Parameter @UserId har ingen standard værdi" nogen der kan hjælpe? Det ser ikke ud til mine OleDbParametre har en værdi når jeg kalder min insert selvom værdien er sat ved page_load og de vises fint i de labels jeg viser inden jeg trykker på en knap "Gem aftale" og kalder insert metoden.

--Koden er her--
public partial class _Default : System.Web.UI.Page
{
    DateTime cacheSelectedDate;
    String  cacheUserId;
    String  cacheLengthId;
    String  cacheTimeId;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            cacheLengthId    = Cache.Get("parmLengthId").ToString();
            cacheTimeId      = Cache.Get("parmTimeId").ToString();
            cacheSelectedDate = (DateTime)Cache.Get("parmSelectedDate");
            cacheSelectedDate = cacheSelectedDate.AddHours(System.Double.Parse(cacheTimeId.ToString()));
            cacheUserId      = "2";

            LabelDate.Text = cacheSelectedDate.ToString();
            LabelTime.Text = cacheTimeId.ToString();
            LabelLength.Text = cacheLengthId.ToString();
            LabelUser.Text = cacheUserId.ToString();
        }
    }

    protected void InsertAppointment(object sender, EventArgs e)
    {
        //Add the event to the database
        OleDbConnection insertConn    = null;
        OleDbCommand    insertCommand = null;
        OleDbParameter  parmUserId    = new OleDbParameter("@UserId", OleDbType.VarChar, 50);
        OleDbParameter  parmDateTime  = new OleDbParameter("@DateTime", OleDbType.DBDate);
        OleDbParameter  parmTimeId    = new OleDbParameter("@TimeId", OleDbType.VarChar, 50);
        OleDbParameter  parmLengthId  = new OleDbParameter("@LengthId", OleDbType.VarChar, 50);

        insertConn    = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Temp\\WebSites\\Hos Simone - Booking\\App_DB\\booking.mdb");
        insertCommand = new OleDbCommand("Insert into AppointmentTable (UserId, AppointmentDate, TimeId, LengthId) values (@UserId, @AppointmentDate, @TimeId, @LengthId)", insertConn);

        parmUserId.Value  = cacheUserId;
        parmDateTime.Value = cacheSelectedDate;
        parmTimeId.Value  = cacheTimeId;
        parmLengthId.Value = cacheLengthId;

        insertCommand.Parameters.Add(parmUserId);
        insertCommand.Parameters.Add(parmDateTime);
        insertCommand.Parameters.Add(parmTimeId);
        insertCommand.Parameters.Add(parmLengthId);
         
        insertConn.Open();
        insertCommand.ExecuteNonQuery();
        insertConn.Close();

        Response.Redirect("default.aspx");
    }
Avatar billede faxekondi Nybegynder
30. september 2006 - 15:04 #1
Løste det selv :) Lavede Page_Load om til til at se sådan her ud:
PS: Hvis nogen vil forklare forskellen så er pointene stadig til rådighed.

--Kode her--

    protected void Page_Load(object sender, EventArgs e)
    {
            cacheLengthId    = Cache.Get("parmLengthId").ToString();
            cacheTimeId      = Cache.Get("parmTimeId").ToString();
            cacheSelectedDate = (DateTime)Cache.Get("parmSelectedDate");
            cacheSelectedDate = cacheSelectedDate.AddHours(System.Double.Parse(cacheTimeId.ToString()));
            cacheUserId      = "2";
        if (!Page.IsPostBack)
        {
            LabelDate.Text = cacheSelectedDate.ToString();
            LabelTime.Text = cacheTimeId.ToString();
            LabelLength.Text = cacheLengthId.ToString();
            LabelUser.Text = cacheUserId.ToString();
        }
    }
Avatar billede neoman Novice
30. september 2006 - 15:10 #2
Se http://msdn2.microsoft.com/en-us/library/ms178472.aspx

Når du trykker på en knap så køres PageLoad altid inden den eventhandler som din knap sætter i gang. Din oprindelige hentning af data fra cache blev kun eksekveret første gang siden kørte- men ej efterfølgende, og ergo var dataene tomme når din Insert-ting kørte.

Du skal fjerne if !page.ispostback simpelthen.

I øvrigt - du er modig at gemme ting i cachen. Tingene der kan jo forsvinde uden at kny, så det mindste man bør gøre er at checke om de faktisk findes der, inden man assigner værder fra cachen :)
Avatar billede faxekondi Nybegynder
30. september 2006 - 15:18 #3
Takker for den gode forklaring er ny i .net så jeg kager lidt rundt i det ind imellem :)
Kan jeg give dig point på en kommentar eller skal du lave et "svar" først?
Avatar billede neoman Novice
30. september 2006 - 15:21 #4
Good luck med det - det er faktisk til at gå til, når man først får lidt styr på begreberne.
Avatar billede faxekondi Nybegynder
30. september 2006 - 15:31 #5
Takker, ja det jo nok ganske normalt med lidt start vanskligheder :)
Avatar billede faxekondi Nybegynder
30. september 2006 - 15:33 #6
Kan ikke acceptere dit svar.. Når jeg trykker på knappen reloader siden bare.. Prøver lige senere idag igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester