1

我正在看一个网络教程,而讲师说的是我不懂的语言,并且视频没有显示完整的长度。谁能告诉我这条线应该是什么样子......

 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 +"')";

你打错字了。

此外,缺少单引号 - ( StudDOBTxt.Text +")") 应该是StudDOBTxt.Text +"')"- 这会导致 SQL 服务器端出现语法错误。

至于查询的参数化形式(不受 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 回答