2016-11-24 32 views
1

返回值中的错误我试图在一个int变量中得到sql查询的结果,但我得到了对象null引用错误。请有人指导我。ExecuteScalar()

oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 

objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid=" + intUserID; 
int value = (Int32)(objCmd.ExecuteScalar()); 
oconn.Close(); 
+2

那么,什么是空的,我想'objCmd'或'oSession'。调试器是一个很棒的工具 –

+0

这绝对不是重复的。 'objCmd'和'oSession'都不是'null'。 – dasblinkenlight

+0

@dasblinkenlight:这是一个很好的。你的水晶球告诉你了吗? –

回答

5
ExecuteScalar()

返回null当命令没有行。在你的情况下,当intUserId不对应于现有的用户时,将返回null

切换到int?来处理这个问题:

int? value = (Int32?)(objCmd.ExecuteScalar()); 

现在你的变量时,在数据库中存在intUserIdvalue将被设置为non-null;否则,它将是null

+0

[dasblinkenlight](http://stackoverflow.com/users/335858/dasblinkenlight)您是对的,因为该异常不在'ExecuteScalar()'函数中。在此[MSDN文章](https://msdn.microsoft.com/zh-cn/ com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v = vs.110).aspx#Exceptions)有一个ExecuteScalar异常列表。 – Yahfoufi

+0

认为它引起了一个'InvalidCastException',但由于取消装箱值类型,你会得到一个'NullRefernceException'。它提到[在这里](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx):_“试图unbox'null'会导致一个'NullReferenceException'。尝试解除对不兼容值的引用类型导致一个'InvalidCastException'。“_ –

0
oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 
objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid="  + intUserID; 
var x=objCmd.ExecuteScallar(); 
if (x!= null && DBNull.Value != x) 
{ 
int value = (Int32)(objCmd.ExecuteScalar()); 
} 

oconn.Close(); 

试试这个...