1

ここに public DataTable があり、コードは正しく見えますが、何も返されず、OrderID が正しく、クエリ自体が正しく、何も返されません...理由を教えてもらえますか?

public DataTable get_OrderTransaction_Master_ByOrderID(Int64 orderID)
    {

        cn = new SqlConnection(objCommon.IpcConnectionString);
        cn.Open();

        string query = "select transactionID from dbo.OrderTransaction_Master where orderID = " + orderID;
        SqlCommand queryCommand = new SqlCommand(query, cn);
        SqlDataReader queryCommandReader = queryCommand.ExecuteReader();
        DataTable dataTable = new DataTable();
        dataTable.Load(queryCommandReader);
        cn.Close();
        return dataTable;

    }
4

1 に答える 1

2

警告:これは不完全な情報に基づく推測です:

これを試してください: クエリ文字列を変更し、行を追加してパラメーターを追加します。

    string query = "select transactionID from dbo.OrderTransaction_Master where orderID = @OrderId";
    SqlCommand queryCommand = new SqlCommand(query, cn); 
    queryCommand.Parameters.AddWithValue("@OrderId", orderID);
    SqlDataReader queryCommandReader = queryCommand.ExecuteReader(); 

説明: これにより、 SQL インジェクションが防止されるだけでなく、OrderId が正しく処理されることが自動的に保証されます。

データベースの OrderId のデータ型を指定していません。たぶん非数値だと思います。(guid または varchar - 数字以外の ID を使用するデータベースを見たことがあるので、考えられないことではありません。) 数字以外の場合は、値の周りの引用符が欠落している可能性があります。

例:

Where Id = 1

と同じではありません

Where Id= '1'

パラメータ化されたクエリを使用すると、これが自動的に修正されます。

于 2012-10-12T21:23:39.607 に答える