Jag har en klass där jag bla uppdaterar nyheter som i exemplet nedan. Problemet är att jag får fel vid raden objAdapter.Update(ds, "Nyheter").
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information.
Skriver jag en vanlig SELECT-sats fungerar det.
Så här ser min lagrade procedur ut:
SELECT * FROM Nyheter WHERE id = [@id];
Använder access som databas.
Varför fungerar det inte med lagrad procedur eller har jag glömt något?
Public Function uppdateraNyhet() As DataSet
Dim connection As New clsDatabas
Dim cn As OleDbConnection
cn = connection.connectionString
Dim objCmd As New OleDbCommand
objCmd.CommandText = "SelectNyhetId"
objCmd.Connection = cn
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id
Dim objAdapter As New OleDbDataAdapter
objAdapter.SelectCommand = objCmd
Dim objCommandBuilder As New OleDbCommandBuilder(objAdapter)
Dim ds As New DataSet
objAdapter.Fill(ds, "Nyheter")
ds.Tables("Nyheter").Rows(0).Item("rubrik") = rubrik
ds.Tables("Nyheter").Rows(0).Item("nyhet") = nyhet
objAdapter.Update(ds, "Nyheter")
Return ds
End Function
DinoMedlem sedan sep. 20011 914 inlägg SELECT * FROM Nyheter WHERE id = [?];
Ska jag ändra lagrade proceduren till denna:
SELECT * FROM Nyheter WHERE id = [?];
Och hur ska fortsättningen av koden se ut för att få in id till sql-satsen?
DinoMedlem sedan sep. 20011 914 inlägg Det är så din procedur skall se ut. Frågetecknet är en placeholder för din parameter.
PDahlenMedlem sedan apr. 2004778 inlägg Eftersom inlägget var irrelevant tar jag bort det. :)
PDahlenMedlem sedan apr. 2004778 inlägg Sorry. :)
Och jag som kollade så noga efter om det stod access nånstans. :)
DinoMedlem sedan sep. 20011 914 inlägg Även alla OleDb i trådskaparens kod borde gett dig en ledtråd. ;)
Men hur ska jag skriva i koden för att ge parametern ett id utifrån det översta inlägget?
VimpMedlem sedan juli 20022 537 inlägg SELECT * FROM Nyheter WHERE id = [?] ORDER BY id DESC;
Om du bara vill ha det senaste..
SELECT TOP 1 * FROM Nyheter WHERE id = [?] ORDER BY id DESC;
Samt om det endast är det senaste id-numret du vill ha:
SELECT TOP 1 id FROM Nyheter WHERE id = [?] ORDER BY id DESC;
Jag vet att detta är den lagrade proceduren
SELECT * FROM Nyheter WHERE id = [?];
Men hur ska jag skriva i koden för att ge id ett värde:
...
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id
...
se ovan för fullständig kod
Skriver jag så här funkar det utan lagrad procedur, men jag vill köra med lagrade procedurer:
'id hämtar värdet från klassen
objCmd.CommandText = "SELECT * FROM Nyheter WHERE id = @id"
objCmd.Connection = cn
objCmd.Parameters.Add("@id", id)
JosefMedlem sedan mars 20023 561 inlägg OleDbCommand objCmd = new OleDbCommand("[i]<namnet på din sp>[/i]", cn);
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.Parameters.Add("@id", txtId.Text, OleDbType.Integer);
Sedan undrar jag varför du har skrivit [?] i din procedure. Skriv istället @id så borde det väl fungera?
Om alla tittar på det översta inlägget och utgår ifrån det. Jag har den lagrade proceduren som du beskriver (kolla högst upp).
Är det ingen som har varit med om liknande fel:
Detta funkar:
Dim objCmd As New OleDbCommand
objCmd.CommandText = "SELECT * FROM Nyheter WHERE id = " & id & ""
objCmd.Connection = cn
Detta funkar inte, varför?
'id hämtar värdet från klassen
Dim objCmd As New OleDbCommand
objCmd.CommandText = "SelectNyhetId"
objCmd.Connection = cn
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id
Tror det blir fel vi parametern.
JosefMedlem sedan mars 20023 561 inlägg Hur ser "SelectNyhetID" ut då?
Så här ser min lagrade procedur ut:
SELECT * FROM Nyheter WHERE id = [@id];
Använder access som databas.