MS Access的INSERT INTO语句中的语法错误

时间:2011-09-22 11:34:58

标签: c# .net asp.net oledb oledbcommand

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

但是当我'忘记'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语句中的语法错误

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

尝试使用dob(你缺少单引号):

 '" + txtDOB.Text + "'.