Har en applikation, hvor det kniber med at få mine @parametre til at virke. DVS min update SQL (SQLOpdater) genererer ingen fejl, men data i DB bliver ikke ændret. Det virker, hvis jeg skriver værdier direkte i web.config, eksempelvis: UPDATE KundeTabel SET Navn = 'Hans' WHERE Nr = @intNR
men ikke hvis jeg skriver:
UPDATE KundeTabel SET Navn = @strNavn WHERE Nr = @intNR
Min INSERT og SELECT med @parametre fungerer fint.
<appSettings> <add key="SQLInsertString" value = "INSERT INTO KundeTabel (Navn,Adresse,PostNr,Byen,TelefonNr,AktuelSaldo,KoebaarTilDato,Bemaerk) VALUES (@strNavn,@strAdresse,@strPostNr,@strByen,@strTelefonNr,@dblAktuelSaldo,@dblKoebAarTilDato,@strBemaerk)" /> <add key="SQLFindKundeNr" value ="SELECT * FROM KundeTabel WHERE Nr = @intNr"/> <add key="SQLOpdater" value ="UPDATE KundeTabel SET Navn = @strNavn, Adresse = @strAdresse, PostNr = @strPostNr, Byen = @strByen, TelefonNr = @strTelefonNr, Bemaerk = @strBemaerk WHERE Nr = @intNr "/> </appSettings> <connectionStrings>
<add name="KundeConnection" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|NavneDb.mdb" providerName="System.Data.OleDb" />
</connectionStrings> ---------------------------------------------------------------- Min opdateringsmetode:
I linien: string strSQL = System.Configuration.ConfigurationManager.AppSettings.Get("SQLOpdater1"); står der naturligvis: "SQLOpdater" (ikke SQLOpdater1)
Den viser: UPDATE KundeTabel SET Navn = @strNavn, Adresse = @strAdresse, PostNr = @strPostNr, Byen = @strByen, TelefonNr = @strTelefonNr, Bemaerk = @strBemaerk WHERE Nr = @intNr
Ja, det vil jeg gøre, men det underlige er at når jeg sætter faste værdier ind: Navn = 'Hans' og beholder WHERE-sætningen så bliver data ajourført rigtigt. Altså på den pågældende post.
prøv evt at sætte en størrelse på MyCommand.Parameters.Add("@strNavn", OleDbType.VarChar,255); flyt din MyConnection.Open(); ned til lige over MyCommand.ExecuteNonQuery();
Jeg tror faktisk.... efter nærmere overvejelse at den ikke får noget match på sidste del af SQL-sætningen: WHERE Nr = @intNr Hvordan kan jeg få udskrevet strengen som bruges og indholdet af @intNr?
MyCommand = new OleDbCommand(strSQL, MyConnection);
Så virker det. Jeg er meget sikker på at det er @intNr der giver problemer. Altså at den ikke får match på WHERE-clausen. Ellers ville den caste en exception. Den siger at der ikke er opdateret poster.
Strengen i web.config kan da ikke have forkert format til en UPDATE?
<add key="SQLOpdater" value ="UPDATE KundeTabel SET Navn = @strNavn, Adresse = @strAdresse, PostNr = @strPostNr, Byen = @strByen, TelefonNr = @strTelefonNr, Bemaerk = @strBemaerk WHERE Nr = @intNr"/>
I databasen er Nr defineret som autonummerering, hvilket vel er en integer af en slags?
Mig bekendt så genkender OldeDbCommand ikke parameternavne, men kun deres rækkefølge..
Jeg har nogle SQL-statements magen til dine, hvor der i stedet for parameternavn står et ? og det fungerer fint. Dit KundeNr skulle så stå sidst i parameterlisten, og prøv også at erstatte parameternavnene med ? i selve SQl-sætningen.
En Automnummerering i Access er en Long Integer i Access-speak og fungerer som en Int32 i min VS, mens en Integer i Access funker som Int16 her i VS.
"The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used. For example:
SELECT * FROM Customers WHERE CustomerID = ?
Therefore, the order in which OleDbParameter objects are added to the OleDbParameterCollection must directly correspond to the position of the question mark placeholder for the parameter in the command text. "
Hmm, jeg kan jo godt udføre en SELECT, INSERT og DELETE ved hjælp af @parametre. Det er bare UPDATE der ikke virker. Jeg synes netop det er CommandType Text??
Hvordan mener du jeg skal strikke min sætning om? Den virker jo når jeg bruger en traditionel SQLstring.
Jeg tror den "æder" parameternavnene uanset, men prøv f.eks. at liste paremetrene i den rækkefølge de optræder i din UPDATE , så alt som refererer til din @intNr står sidst i listen af MyCommand.Parameters.add - statements
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.