Синтаксическая ошибка в инструкции INSERT INTO для MS Access - PullRequest
1 голос
/ 22 сентября 2011

У меня есть команда SQL Insert Into, которая работает в нормальных условиях. Это означает, что если я заполняю каждое текстовое поле, данные отправляются в БД (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 ]

3 голосов
/ 22 сентября 2011

используется параметризованный подход, который не только безопасен от 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 голос
/ 28 сентября 2012

попробуйте это для dob (вам не хватает одинарных кавычек):

 '" + txtDOB.Text + "'. 
...