2013-10-09 39 views
1
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; 
} 

上面的catch中出现错误。它提到使用SqlParameter和ExecuteScalar获取错误

对象引用不设置到对象的实例

它与具有ExecuteScalar线失败。

我想我在这里做错了什么,但无法弄清楚到目前为止。

更新1:我修改了这个问题。基本上,我用一个我正面临的问题创建了另一个问题。我也将其标记为已回答。

这是我刚刚发布的新问题。

Getting timeout errors with SqlTransaction on same table

+0

您是否尝试过调试,并检查command_serial_new.ExecuteScalar()的值?您既在一行中进行投射和比较,这也会使问题更加复杂化。 –

+0

@DaveSwersky:我已经更新了我的问题。请检查 – Anirudh

回答

0

@SLaks答案是正确的。

这里有一个避免错误的方法。无需空检查等,Convert.ToInt32照顾一切。

var itExists = Convert.ToInt32(command_serial_new.ExecuteScalar()) > 0; 
+0

:我已更新我的问题。请检查 – Anirudh

+0

我会建议你创建一个新的问题 –

+0

我将创建一个新的问题。 – Anirudh

2

如果发生这种情况的ExecuteScalar()回报null。 (例如,因为没有行匹配)

由于int是一个值类型,它不能为空;因此,你会得到一个错误。

取而代之,您可以将其转换为int?,该值可以为空。

+0

我已更新我的问题。请检查 – Anirudh

0

尝试:

int i; 
object o = command_serial_new.ExecuteScalar(); 
if(o != null && Convert.ToInt32(o.ToString()) > 0) 
{ 

    //.... 
} 

,以验证您的查询返回的东西

+0

我已更新我的问题。请检查 – Anirudh