1

我有一个在正常条件下工作的 SQL Insert Into 命令。这意味着如果我填写每个文本框,数据将发送到数据库(访问数据库)。

但是当我“忘记” 1 个文本框时,我收到“INSERT INTO 语句中的语法错误”。你怎么能避免这种情况?

string commandPerson = "Insert into Person (LastName,FirstName,DateOfBirth,Phone,Email,AdditionalInfo, Hobbies, CVinDropBOX, Informationrequest) values('" + txtLastN.Text + "','" + txtFirstN.Text + "'," + txtDOB.Text + ",'" + txtPhone.Text + "','" + txtEmail.Text + "','" + txtAdditionalInfo.Text + "','" + txtHobbies.Text + "'," + chkCVDROPBOX.Checked + "," + chkInformation.Checked + ")";

当每个文本框都有一个值时,就没有问题。只有当我将 1 或 2 个文本框留空时,错误消息才会显示:INSERT INTO 语句中的语法错误

4

2 回答 2

3

使用参数化方法,它不仅可以安全地防止 SQL 注入,而且还可以让您解决问题,因为您将在未提供参数值时将其设置为 NULL(或 string.empty)。

这里有一个例子:

string ConnString = Utils.GetConnString();
string SqlString = "Insert Into Contacts (FirstName, LastName) Values (?,?)";
using (OleDbConnection conn = new OleDbConnection(ConnString))
{
  using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
  {
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
    cmd.Parameters.AddWithValue("LastName", txtLastName.Text);
    conn.Open();
    cmd.ExecuteNonQuery();
  }
}

在这里完整的文章: http: //www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

于 2011-09-22T11:40:17.807 回答
1

试试这个 dob (你错过了单引号):

 '" + txtDOB.Text + "'. 
于 2012-09-28T04:43:36.807 回答