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;
}

上記のキャッチでエラーが発生します。言及している

オブジェクト参照がオブジェクトのインスタンスに設定されていません

の行で失敗していますExecuteScalar

ここで何か間違ったことをしていると思いますが、これまでのところわかりません。

更新 1 : この質問を修正しました。基本的に、私が直面している問題で別の質問を作成しました。また、回答済みとしてマークしました。

これが私が今投稿した新しい質問です。

同じテーブルの SqlTransaction でタイムアウト エラーが発生する

4

3 に答える 3

2

ExecuteScalar()これは、 が返された場合に発生しますnull。(例: 行が一致しなかったため)

は値型であるためint、null にすることはできません。したがって、エラーが発生します。

int?代わりに、 null 許容の にキャストできます。

于 2013-10-09T19:18:42.893 に答える
0

試す:

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

   //....
}

クエリが何かを返したことを確認する

于 2013-10-09T19:20:48.690 に答える