1

这很奇怪。我的 c# 应用程序中有一个非常简单的 SQL 查询,它计算 SQL Server 表中的记录。代码片段如下:

    // 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 回答
2

更简单的说法是

 int returnval = 0;
        using (SqlConnection con = new SqlConnection(connStr))
        {
                SqlCommand command = new SqlCommand("SELECT COUNT(Slotted_Port_UID) FROM tblSlottedCardPorts WHERE Slot_ID = @SlotID ", connection);
                command.Parameters.AddWithValue("@SlotID", EquipmentSlotID);
                returnval = Convert.ToInt32(command.ExecuteScalar());

        }
于 2014-12-02T15:13:41.313 回答
-1

我在 SQL 中有这样的东西:

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

存储过程从 SQL Management Studio 运行正常,但从代码调用时返回 null。删除@NumberOfRecords变量后,查询从代码中工作:

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