我正在尝试执行一个存储过程,然后使用if语句来检查空值,并且我做得很短。我是一个VB人,所以如果我犯了小学生语法错误,请耐心等待。
objConn = new SqlConnection(strConnection);
objConn.Open();
objCmd = new SqlCommand(strSQL, objConn);
rsData = objCmd.ExecuteReader();
rsData.Read();
if (!(rsData["usr.ursrdaystime"].Equals(System.DBNull.Value)))
{
strLevel = rsData["usr.ursrdaystime"].ToString();
}
这是否允许我检查SQL连接是否只返回一个值,如果是,那么填充我的字符串?
我习惯于只检查下面的内容,看看是否正在返回一个值而不确定我是否正确使用C#
如果不是IsDBNull(rsData(“usr.ursrdaystime”))
任何帮助将不胜感激!
答案 0 :(得分:89)
这应该有效。
if (rsData["usr.ursrdaystime"] != System.DBNull.Value))
{
strLevel = rsData["usr.ursrdaystime"].ToString();
}
还需要添加using语句,如下文:
using (var objConn = new SqlConnection(strConnection))
{
objConn.Open();
using (var objCmd = new SqlCommand(strSQL, objConn))
{
using (var rsData = objCmd.ExecuteReader())
{
while (rsData.Read())
{
if (rsData["usr.ursrdaystime"] != System.DBNull.Value)
{
strLevel = rsData["usr.ursrdaystime"].ToString();
}
}
}
}
}
这将自动处理(关闭)块{..}之外的资源。
答案 1 :(得分:9)
惯用的方式是:
if(rsData["usr.ursrdaystime"] != DBNull.Value) {
strLevel = rsData["usr.ursrdaystime"].ToString();
}
此:
rsData = objCmd.ExecuteReader();
rsData.Read();
让它看起来像你正在读取一个值。请改用IDbCommand.ExecuteScalar
。
答案 2 :(得分:4)
答案 3 :(得分:3)
是的,只是语法问题。试试这个:
if (reader["usr.ursrdaystime"] != DBNull.Value)
.Equals()
正在检查是否two Object instances are the same。
答案 4 :(得分:2)
考虑:
if(rsData.Read()) {
int index = rsData.GetOrdinal("columnName"); // I expect, just "ursrdaystime"
if(rsData.IsDBNull(index)) {
// is a null
} else {
// access the value via any of the rsData.Get*(index) methods
}
} else {
// no row returned
}
另外:您需要更多using
; p
答案 5 :(得分:0)
if(!rsData.IsDBNull(rsData.GetOrdinal("usr.ursrdaystime")))
{
strLevel = rsData.GetString("usr.ursrdaystime");
}
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx
答案 6 :(得分:0)
我经常使用String.IsNullorEmpty。它将起作用,因为当DBNull设置为.ToString时,它返回空。
if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){
strLevel = rsData["usr.ursrdaystime"].toString();
}
答案 7 :(得分:0)
三元运算符应该在这里表现出色: 条件? first_expression:second_expression;
strLevel =!Convert.IsDBNull(rsData [“ usr.ursrdaystime”])? Convert.ToString(rsData [“ usr.ursrdaystime”]):null
答案 8 :(得分:-2)
首先使用ExecuteScalar
objConn = new SqlConnection(strConnection);
objConn.Open();
objCmd = new SqlCommand(strSQL, objConn);
object result = cmd.ExecuteScalar();
if(result == null)
strLevel = "";
else
strLevel = result.ToString();