“Parameter ?_1 hat keinen default-Wert" Fehlermeldung, wenn ExecuteReader
Haben problem mit den folgenden code in eine web-service. Habe gesucht nach einer Lösung aber nichts, was ich gesehen habe, scheint unterschiedlich zu dem, was ich Tue unten.
NB: Die string-variable "AccountNo" ist eine, die einer Funktion übergeben, die enthält den code unten.
Den Fehler generiert, in der letzten Zeile des code - ExecuteReader.
Dim sConnString As String
Dim rdr As OleDbDataReader
Dim orderPaid As Decimal
Dim fbeused As Decimal
sConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\orders.mdb'"
Dim conn As New OleDbConnection(sConnString)
Dim sb As New StringBuilder
sb.Append("SELECT DISTINCTROW OrderHeaders.Accountno, Sum(([paidqty]*[unitprice])*[orderheaders].[entpercent]/100) AS orderpaid, Sum([freeqty]*[unitprice]) AS fbeused")
sb.Append(" FROM OrderHeaders INNER JOIN OrderDetails ON OrderHeaders.[OrderNo] = OrderDetails.[OrderNo]")
sb.Append(" GROUP BY OrderHeaders.Accountno HAVING OrderHeaders.Accountno=?")
Dim sqlString As String = sb.ToString
Dim cmd As New OleDbCommand(sqlString, conn)
cmd.CommandType = CommandType.Text
'cmd.Parameters.AddWithValue("AccNo", AccountNo)
cmd.Parameters.Add("AccNo", OleDbType.VarWChar).Value = AccountNo
conn.Open()
rdr = cmd.ExecuteReader()
Den Fehler den ich bekomme, ist (wie oben erwähnt)
Parameter ?_1 has no default value
- mögliche Duplikate von OleDbCommand Parameter Reihenfolge und Priorität
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine Schande, dass die beiden top-StackOverflow-Ergebnisse derzeit Google für die Suche mit
beide haben die Fragesteller kommen zurück und sagen, es waren Mängel in Ihrer ursprünglichen Frage oder Ihre test-Daten oder was auch immer (auch wenn es gut ist, dass Fragensteller, wieder Einchecken).
Die Erklärung für diesen Fehler (wie angetroffen in normalen Situationen) stammen von Marc Gravell hier:
Was Sie sieht richtig mit dem "?" als parameter-Platzhalter für die Parameter Hinzugefügt, der Befehl. Sie haben derzeit die parameter identifiziert, die als OleDbType.VarWChar. Ist das beabsichtigt? Sind Sie den Umgang mit unicode-Daten? Ich vermute in diesem Fall nicht. Versuchen Sie OleDbType.Welcher Char ist auch vertreten zu behandeln System.String-Werte.
Könnten Sie auch sicherstellen, dass Sie einen string, indem
AccountNo.ToString()
Die Frage in der Tat hatte eine falsche Annahme, und dass war, dass es ein Fehler im code.
Die syntax der SQL-Abfrage war zu korrigieren und die parameter werden richtig eingesetzt. Jedoch sind die test-Daten enthalten Fehler und daher kein Ergebnis war, zurückgegeben wird, indem Sie einen korrekt formatierten query.
Danke an alle für den input.
Vervielfältigt von:
OleDbCommand Parameter Reihenfolge und Priorität
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx