2

これが私のコードです:

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=MANINOTEBOOK\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Casesheet");
    con.Open();
    SqlCommand cmd = new SqlCommand("select PatientID from FTR where PatientID='" + textBox1.Text + "'", con);
    textBox2.Text = cmd.ExecuteScalar().ToString();
    if (textBox2.Text == textBox1.Text)
    {
        Consultation cs = new Consultation(textBox1.Text);
        cs.Show();
    }
    else
    {
        MessageBox.Show("Data not found");
    }            
}

このコードをコンパイルすると、「NullReferenceExceptionが処理されませんでした」というエラーが発生します。解決方法がわかりません。「executescalar」コマンドで生成された値がnullかどうかを確認する必要があります。この問題の解決にご協力ください。

4

4 に答える 4

3

例外が発生した可能性が最も高いToString:

textBox2.Text = cmd.ExecuteScalar().ToString();

これは、その ID を持つ患者がデータベースに見つからなかった場合に発生します。これは、 ExecuteScalarnull が返されるためです。したがって、null をチェックする必要があります。

Object patID = cmd.ExecuteScalar();
if(patID != null)
{
    String patientID = patID.ToString();
    // ...
}

: 文字列を連結して SQL クエリを作成するのではなく、 SQL インジェクションSqlParametersを回避するために使用してください。

于 2012-10-30T13:31:23.063 に答える
1
cmd.ExecuteScalar()

結果が空の場合、これは null を返す可能性があります。に変更する必要があります

 (cmd.ExecuteScalar() ?? "").ToString()

nullの場合は空の文字列に変更されます

于 2012-10-30T13:31:36.263 に答える
0

.ToString() と Convert.ToString() には違いがあります*

Convert.ToString() は null 値を処理します。つまり、null 入力を与えると、空の文字列が返されます。

一方、使用した .ToString() は、null 値が渡されると例外をスローします。

したがって、次のようにコードを言い換えることを選択できます。

textBox2.Text = cmd.ExecuteScalar().ToString();

** 唯一の違いではありません。詳細はこちら: Convert.ToString() と .ToString() の違い

于 2012-10-30T13:35:13.473 に答える
0
private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=MANINOTEBOOK\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=Casesheet");
  try
  {
    con.Open();
    SqlCommand cmd = new SqlCommand("select PatientID from FTR where PatientID='" + textBox1.Text + "'", con);
    textBox2.Text = cmd.ExecuteScalar().ToString();
    if (textBox2.Text == textBox1.Text)
    {
        Consultation cs = new Consultation(textBox1.Text);
        cs.Show();
    }
    else
    {
        MessageBox.Show("Data not found");
    }    
  } 
   catch(NullReferenceException ex)
   {
   Console.Write(ex.message);
   }     
}

try catch ブロックを配置することで例外をキャッチできます。生成された値を知りたい場合は、コードにブレークポイントを配置します。

于 2012-10-30T13:40:09.710 に答える