2011-06-01 281 views
1

我现在在编程中使用SQL,并且正在查询数据库。如果select语句没有返回任何行,返回什么?

scCommand = new SqlCommand("SELECT LegislationID FROM Legislation WHERE Number = @ECERegulation", sconConnection); 
     scCommand.Parameters.Add("@ECERegulation", SqlDbType.NVarChar); 
     scCommand.Parameters["@ECERegulation"].Value = strECERegulation; 

     return (int)scCommand.ExecuteScalar(); 

我的问题是,如果我的参数不匹配我查询的表中的任何内容,会返回什么?我需要有一个if语句来处理不匹配的ECERegulation。它会返回null吗?或者它会返回零立法ID?任何帮助,将不胜感激。

+9

什么阻止你试图找出? – 2011-06-01 18:21:16

+1

或阅读MSDN的ExecuteScalar看看它是否告诉你? – Nik 2011-06-01 18:22:45

回答

4

docs

返回值
第一行的在结果集中的第一列,或空引用(没有在Visual Basic)如果结果集是空的。返回最多2033个字符。

1

如果没有找到记录,则返回NULL。所以你会得到一个铸造错误。

您需要在投射前检查结果是否为空。并根据您的业务规则决定是否抛出异常或返回零。

+0

事实上错了。如果查询返回一个包含数据库NULL的单个记录,则返回'DBNull'(特别是);那就是你得到铸造错误的地方。查询返回0条记录时返回'null';没有铸造错误。 – 2015-07-09 15:17:46

1

可以使用空值< int>来匹配null。您也可以传递投射错误并像这样返回null。

int? GetSomething() 
{ 
    ..... 
    ..... 
    return (int?)TypeDescriptor.GetConverter(typeof(int?)).ConvertFrom(scCommand.ExecuteScalar()); 
}