Problem med uppdatering av post (SqlDataSource / GridView / asp.net/C#)

Permalänk
Medlem

Problem med uppdatering av post (SqlDataSource / GridView / asp.net/C#)

Jag har problem med att få poster i en tabell att uppdateras. Jag använder en SqlDataSource som hämtar information ur en mssql-databas. Sidan innehåller en GridView som man kan redigera posterna i.
Har tidigare använt en DetailsView för att redigera en enstaka post och det fungerade, dock hämtades informationen ur en access-databas, fast fortfarande mha en SqlDataSource.

Dock får jag ingen av ändringarna att sparas ner i databasen, och jag får inget felmeddelande om att databasen är skrivskyddad. Jag kan redigera andra poster i andra tabeller med helt egen kod, men den metod som GridView använder fungerar alltså inte.

Jag har försökt att kopiera koden från den SqlDataSource som fungerar, men då får jag syntaxfel i min UPDATE-sats, trots att den borde fungera.
Den kod som inte ger syntaxfel ger å andra sidan inget som helst resultat.
Jag lutar åt att istället köra en update från code-behind och trigga den på när GridViewCommandEventArgs innehåller update, det vet jag att min GridView genererar.

Följande kod genererar syntax-fel:

<asp:SqlDataSource ID="booking_capacity" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>" ProviderName="<%$ ConnectionStrings:LocalSqlServer.ProviderName %>" SelectCommand="SELECT [weekid], [capacity] FROM [gd_booking_capacity]" UpdateCommand="UPDATE [gd_booking_capacity] SET [capacity]=? WHERE [weekid]=?"> <UpdateParameters> <asp:Parameter Name="capacity" Type="Int32" /> <asp:Parameter Name="weekid" Type="Int32" /> </UpdateParameters> </asp:SqlDataSource>

Den kod som inte lämnar felmeddelande men inte uppdaterar något värde:

<asp:SqlDataSource ID="booking_capacity" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServer %>" ProviderName="<%$ ConnectionStrings:LocalSqlServer.ProviderName %>" SelectCommand="SELECT [weekid], [capacity] FROM [gd_booking_capacity]" UpdateCommand="UPDATE [gd_booking_capacity] SET [capacity]=@capacity WHERE [weekid]=@weekid"> <UpdateParameters> <asp:Parameter Name="capacity" Type="Int32" /> <asp:Parameter Name="weekid" Type="Int32" /> </UpdateParameters> </asp:SqlDataSource>

Någon som har något bra förslag på hur jag felsöker, eller är det bara att knappa ihop lite i code-behind-filen?

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Zwift/storage: i7-2600k | GTX1050 | 4U chassi
HTPC2: Intel NUC3217IYE | 8GB | 120GB mSATA
Servrar: 3x NUC 10 i5 ESX/vSAN-kluster | Fujitsu Primergy Tx1310 M1 | Supermicro AMD Opteron 6378

Permalänk

Bör du verkligen ha brackets runt de där? och varför har du ett frågetecken i den första?

http://msdn.microsoft.com/en-us/library/system.web.ui.webcont...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Jag har hittat flera inlägg runt om på nätet där det används just frågetecken. Det är dessutom den koden som WDExpress2005 skapar om man använder guiden till SqlDataSource.

Dock har jag hittat lika många referenser till koden som används i exempel två.
Den andra kodsnutten är som sagt var den jag själv skulle tro mest på, men förutom att den inte genererar ett syntaxfel så ger den heller inget resultat i databasen.
Jag har kört UPDATE-satsen som en query mot SQL-servern och då fungerar det fint, dock utan parametriserade värden.

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Zwift/storage: i7-2600k | GTX1050 | 4U chassi
HTPC2: Intel NUC3217IYE | 8GB | 120GB mSATA
Servrar: 3x NUC 10 i5 ESX/vSAN-kluster | Fujitsu Primergy Tx1310 M1 | Supermicro AMD Opteron 6378

Permalänk

Om du tittar på länken jag skickade kör de ju en onSQlUpdate och sen i den eventhandlaren kör de en transaction?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Slängde in följande i code-behind:

public void gwCapacity_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName.Contains("Update")) { try { Trace.Write("uppdatera"); booking_capacity.Update(); } catch { Trace.Wite("Uppdatering misslyckades"); } } }

I tracen skrivs det ut att den kommer in i if-satsen och det kastas inget undantag, men inte f-n uppdateras posten ändå...

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Zwift/storage: i7-2600k | GTX1050 | 4U chassi
HTPC2: Intel NUC3217IYE | 8GB | 120GB mSATA
Servrar: 3x NUC 10 i5 ESX/vSAN-kluster | Fujitsu Primergy Tx1310 M1 | Supermicro AMD Opteron 6378

Permalänk

DU kan inte slänga in typ denna?

private void OnSqlUpdating(Object source, SqlDataSourceCommandEventArgs e) { DbCommand command = e.Command; DbConnection cx = command.Connection; cx.Open(); DbTransaction tx = cx.BeginTransaction(); command.Transaction = tx; }

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Jag testar imorgon. Nu ska jag sova, måste köra sambon till tåget kl 5...

Visa signatur

WS: R7 2700x | RTX 2070S | Corsair AX860W | Lian Li PC-O11 Dynamic
Zwift/storage: i7-2600k | GTX1050 | 4U chassi
HTPC2: Intel NUC3217IYE | 8GB | 120GB mSATA
Servrar: 3x NUC 10 i5 ESX/vSAN-kluster | Fujitsu Primergy Tx1310 M1 | Supermicro AMD Opteron 6378

Permalänk
Medlem

Prova att byta ut dina @ mot ?.
[capacity]=@capacity WHERE [weekid]=@weekid till [capacity]=?capacity WHERE [weekid]=?weekid
vill minnas att MySQL inte ville ha @ som MSSQL använder för parametrar.