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
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