public TransImport()
{
ConnString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
conn_new = new SqlConnection(ConnString);
command_serial_new = conn_new.CreateCommand();
command_serial_new.CommandText = "SELECT 1 FROM YSL00 WHERE SERLNMBR = @slnr";
var p = new SqlParameter("@slnr", SqlDbType.NVarChar, 50);
command_serial_new.Parameters.Add(p);
//Here you will start reading flat file to get serialnumber.
//Here I have shown a simple call using one value 12345 but it will be 1000's of
//lines from flatfile.
if (CheckSerialNumber('12345'))
DisplayMessage("Good serialnumber"); //this function is not copied here.
}
private Boolean CheckSerialNumber(string SerialNumber)
{
command_serial_new.Parameters["@slnr"].Value = SerialNumber;
try
{
var itExists = (Int32)command_serial_new.ExecuteScalar() > 0;
if (itExists)
{
return true;
}
}
catch (Exception ex)
{
LogException(ex, "Error in CheckSerialNumber =>"+ command_serial_new.CommandText.ToString());
}
return false;
}
我在上面的捕获中遇到错误。它提到
对象引用未设置为对象的实例
使用ExecuteScalar
的行失败了。
我想我在这里做错了什么,但到目前为止无法搞清楚。
更新1 :我已修改此问题。基本上我用另一个问题创建了另一个问题。我也将其标记为已回答。
这是我刚刚发布的新问题。
答案 0 :(得分:2)
如果ExecuteScalar()
返回null
,则会发生这种情况。 (例如,因为没有匹配的行)
由于int
是值类型,因此不能为null;因此,你得到一个错误。
相反,您可以将其强制转换为可以为空的int?
。
答案 1 :(得分:0)
尝试:
int i;
object o = command_serial_new.ExecuteScalar();
if(o != null && Convert.ToInt32(o.ToString()) > 0)
{
//....
}
验证您的查询是否返回了
答案 2 :(得分:0)
@SLaks答案是正确的。
这是避免错误的另一种方法。无需空检查等,Convert.ToInt32
可以处理所有事情。
var itExists = Convert.ToInt32(command_serial_new.ExecuteScalar()) > 0;