1

Web チュートリアルを見ていましたが、講師が理解できない言語で話し、ビデオが完全な長さではありませんでした。ラインがどのように見えるべきか誰か私にアドバイスできますか...

 private void Insertbtn_Click(object sender, EventArgs e)
 {
   OleDbCommand cmd = new OleDbCommand(); // this is good
   cmd.CommandType = CommandType.Text;    // this is good
   cmd.CommandType = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
   StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
   StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; *// Need help here pls*
   cmd.Connection=myCon;   
   myCon.Open();
   cmd.ExecuteNonQuery();
   myCon.Close();
 }

私はVS 2010 C#で開発しています。アクセスを使用します。

4

3 に答える 3

7

常にパラメータ化されたクエリを使用する必要があります。あなたのコードは、SQL インジェクション攻撃に対してオープンです。

クエリでは、CommandTextプロパティではなくプロパティを使用する必要がありますCommandType

cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
   StudentDOB) Values(@StudIDTxt, @StudNameTxt, @StudCNCITxt, @StudDOBTxt)";

cmd.Parameters.AddWithValue("@StudIDTxt", StudIDTxt.Text);
cmd.Parameters.AddWithValue("@StudNameTxt", StudNameTxt.Text);
cmd.Parameters.AddWithValue("@StudCNCITxt", StudCNCITxt.Text);
cmd.Parameters.AddWithValue("@StudDOBTxtl", StudDOBTxt.Text);
于 2013-03-06T20:33:54.100 に答える
3

あなたの:

cmd.CommandType = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
   StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
   StudCNCITxt.Text + "','" + StudDOBTxt.Text +")";

する必要があります

cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
   StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
   StudCNCITxt.Text + "','" + StudDOBTxt.Text +"')";

タイプミスをしました。

また、 SQLサーバー側で構文エラーが発生する一重引用符がありませんでした-(StudDOBTxt.Text +")")があったはずです-。StudDOBTxt.Text +"')"

クエリのパラメータ化された形式(SQLインジェクション攻撃から安全な形式)の場合、名前付きパラメータの代わりに疑問符を使用する必要があります(コマンドタイプがテキストの場合、ODBCではこのように機能します)。次のようになります。

   cmd.CommandText = @"INSERT INTO Students(StudentID, StudentName, StudentCNCI, StudentDOB) 
                        Values(?,?,?,?)";
   cmd.Parameters.Add(new OleDbParameter("p1", StudIDTxt.Text));
   cmd.Parameters.Add(new OleDbParameter("p2", StudNameTxt.Text));
   cmd.Parameters.Add(new OleDbParameter("p3", StudCNCITxt.Text));
   cmd.Parameters.Add(new OleDbParameter("p4", StudDOBTxt.Text));
于 2013-03-06T20:32:21.723 に答える
2
private void Insertbtn_Click(object sender, EventArgs e)
 {
    OleDbCommand cmd = new OleDbCommand(); // this is good
    cmd.CommandType = CommandType.Text;    // this is good
    cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
    StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; *// Need help here pls*
    cmd.Connection=myCon;   
    myCon.Open();
    cmd.ExecuteNonQuery();
    myCon.Close();
  }

コマンドタイプではなく、コマンドテキストである必要があります

于 2013-03-06T20:32:35.510 に答える