1

これはかなり奇妙です。私の c# アプリケーションには、SQL Server テーブルのレコードをカウントする非常に単純な SQL クエリがあります。コード スニペットは次のとおりです。

    // Returns the number of ports defined for a given slot.
    int returnval = 0;
    connection.Open();
    SqlCommand command = new SqlCommand("SELECT COUNT(Slotted_Port_UID) FROM tblSlottedCardPorts WHERE Slot_ID = @SlotID ", connection);
    command.Parameters.AddWithValue("@SlotID", EquipmentSlotID);
    SqlDataReader reader = command.ExecuteReader();
    if (reader.HasRows)
    {
        if (!reader.IsDBNull(0))
        {
            returnval = reader.GetInt32(0);
        }
    }
    reader.Close();
    connection.Close();
    return returnval;

SQL ステートメントをコピーして SQL Server mgmt studio に直接貼り付けると、クエリは期待どおりに返され、行数に応じて 0 または正の整数が返されます。ただし、コードは .HawRows 条件を通過しますが、reader.IsDBNull(0) 条件で失敗します。tblSlottedCardPorts が存在し、Slotted_Port_UID 列は一意の整数です。これに関する提案はありますか?結合やその他の要因が関係していないため、COUNT が Null 値を返す理由がわかりません。

これについてのアドバイスをありがとう!

ミッチェル

4

4 に答える 4

7

このタイプのクエリの場合-.ExecuteScalar()データリーダーの代わりに使用します

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

于 2012-06-12T15:36:48.270 に答える
5

Read最初の行に行くには電話する必要があります。

if (reader.HasRows)
{
    reader.Read();
    if (!reader.IsDBNull(0))
    {
        returnval = reader.GetInt32(0);
    }
}
于 2012-06-12T15:34:21.447 に答える
-1

私はSQLで次のようなものを持っていました:

declare @NumberOfRecords int;
select @NumberOfRecords=count(*) from ...
return @NumberOfRecords;

ストアドプロシージャはSQLManagementStudioから正常に実行されますが、コードから呼び出すとnullが返されます。変数を削除した後@NumberOfRecords、クエリはコードから機能しました:

select count(*) from ...
于 2012-09-15T20:36:26.060 に答える