-1

パラメータ化された SQLCommand を実行しようとしていますが、これは 1 つの値を返す必要があります。代わりに、空のセットを返し、例外はスローされず、プログラムはそのまま続行されます。

これはクエリです:

SELECT SUM(s.cost) AS cost
FROM Spending s JOIN Date d ON s.dateID = d.dateID 
    JOIN [Service category] sc ON s.[service categoryID] = sc.[service categoryID]
WHERE sc.category1 = 'Phone' AND s.personID = @person
    AND d.month = @month AND d.year = @year

C# コードは次のとおりです。

        SqlCommand commandSelect = new SqlCommand(query, conn);
        foreach (string[] p in pars)
        {
            commandSelect.Parameters.AddWithValue("@" + p[0], p[2]);
        }
        SqlDataReader res = commandSelect.ExecuteReader();

3 つのパラメーター パスがあり、デバッガーで SQLcommand をチェックすると、正しく渡されます。@person は文字列で、他の 2 つは整数です。

どんな助けでも大歓迎です。

編集: おそらく pars 配列の構造も追加する必要があります:

pars[0][0] = "person"
pars[0][2] = "'IDString here'"
pars[1][0] = "month"
pars[1][2] = "2"
pars[2][0] = "year"
pars[2][2] = "2012"
4

2 に答える 2

3

実際にRead()DataReaderを呼び出していますか

while (res.Read())
{
    // something with res[x] field values here
}

MSDNを参照してください-http://msdn.microsoft.com/en-us/library/haa3afyz(v= vs.100 ).aspx

それか、クエリに結果がありません。

編集から、パラメータ値は(ベストプラクティスではなく、現在の設計に基づいて)「すべき」である

pars[0][2] = "IDString here"
于 2012-08-30T09:32:09.437 に答える
0

問題は addWithValue() が文字列を NVARCHAR にキャストすることだったようです。私のフィールドは VARCHAR 型だったので、WHERE 句で問題が発生したと思います。明示的な型キャストが問題を解決しました。

于 2012-09-03T08:03:01.200 に答える