2

Web サービスで以下のコードに問題があります。解決策を検索しましたが、私が見たものは、以下で行っていることと異なるようには見えません。

注: 文字列変数 'AccountNo' は、以下のコードを含む関数に渡されます。

エラーは、コードの最後の行である 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()

私が得るエラーは(上記のように)

Parameter ?_1 has no default value
4

4 に答える 4

0

あなたが持っているものは「?」で正しいように見えます。コマンドに追加されるパラメーターのパラメーター プレースホルダーとして。現在、OleDbType.VarWChar として識別されるパラメータがあります。それは意図したものですか?ユニコードデータを扱っていますか? この場合ではないと思います。System.String 値を処理するためにも表される OleDbType.Char に変更してみてください。

を使用して文字列を取得していることを確認することもできます

AccountNo.ToString()

于 2014-01-21T18:20:13.350 に答える
0

実際、質問には間違った仮定があり、それはコードにエラーがあったということでした。

SQL クエリの構文は正しく、パラメーターは正しく挿入されていました。ただし、テスト データにエラーが含まれていたため、正しい形式のクエリで結果が返されませんでした。

ご意見ありがとうございます。

于 2014-01-26T22:32:21.353 に答える
-1

複製: OleDbCommand パラメータの順序と優先度

CommandType が Text に設定されている場合、OLE DB .NET プロバイダーは、OleDbCommand によって呼び出される SQL ステートメントまたはストアド プロシージャにパラメーターを渡すための名前付きパラメーターをサポートしません。この場合、疑問符 (?) プレースホルダーを使用する必要があります。例えば:

// Create SQL with ? for each parameter
String sql = "SELECT Address FROM Adresses WHERE Country = ? AND City = ?";
OleDbCommand command = new OleDbCommand(sql , connection);

// Add to command each paramater VALUE by position. 
// One parameter value for ?
command.Parameters.Add("My City") ;
command.Parameters.Add("My Country") ;

http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

于 2014-01-21T16:31:38.327 に答える