我有一个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语句中的语法错误
答案 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 + "'.