在C#中插入访问数据库查询错误

时间:2016-01-31 10:49:33

标签: c# winforms

OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;
                             Data Source=C:\\Users\\SS\\Documents\\131Current1\\125\\Current one\\ClinicMainDatabase.accdb");
my_con.Open();

OleDbCommand o_cmd1 = my_con.CreateCommand();
o_cmd1.CommandText = "INSERT INTO Personal_Details(Date,Time,Patient_Name,Contact_Number,Gender,Allergic_To,KCO) VALUES ('" + DateTime.Now.ToString("dd-MM-yyyy") + "','" + DateTime.Now.ToString("h:mm:ss tt") + "','" + txtPatientName.Text + "','" + txtContactNo.Text + "','" + comboBoxGender.Text + "','" + txtAllergic.Text + "','" + txtKCO.Text + "')";

int j = o_cmd1.ExecuteNonQuery();

我在插入声明中收到语法错误如果有人帮助我,我不明白什么是错误我真的非常感谢。感谢提前。

2 个答案:

答案 0 :(得分:1)

日期和时间通常是许多数据库系统中的保留关键字。你应该至少用[]包装它们。更优选地,如果您正在设计表格,请将字段名称更改为更具描述性的名称。例如,如果日期和时间代表提醒,那么您可以使用ReminderDate和ReminderTime,以免干扰保留的关键字。

并遵循已经给出的参数建议。

答案 1 :(得分:0)

使用命令参数而不是连接字符串。您的代码是针对SQL注入攻击打开的,或者在您的特定情况下,该问题可能与无效的用户输入有关。试着解决这种情况: 如果txtContactNo.Text返回此字符串"Peter's contact is +123456"怎么办?那么SQL查询将如何?密切关注'性格。

无论您的输入验证有多好,您都应该始终使用参数化SQL查询。它还具有查询计划缓存等优点。

所以在你的情况下,代码必须这样写:

OleDbConnection my_con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;
                             Data Source=C:\\Users\\SS\\Documents\\131Current1\\125\\Current one\\ClinicMainDatabase.accdb");
using(my_con)
{
   my_con.Open();

   using(OleDbCommand o_cmd1 = my_con.CreateCommand())
   {
       o_cmd1.CommandText = @"
INSERT INTO Personal_Details ([Date],  [Time],  Patient_Name, Contact_Number, Gender,  Allergic_To, KCO) 
VALUES                       (@date, @time, @name,        @contNo,        @gender, @alergic,    @kco)";

       o_cmd1.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd-MM-yyyy"));
       o_cmd1.Parameters.AddWithValue("@time", DateTime.Now.ToString("h:mm:ss tt"));
       o_cmd1.Parameters.AddWithValue("@name", txtPatientName.Text);
       o_cmd1.Parameters.AddWithValue("@contNo", txtContactNo.Text);
       o_cmd1.Parameters.AddWithValue("@gender", comboBoxGender.Text);
       o_cmd1.Parameters.AddWithValue("@alergic", txtAllergic.Text);
       o_cmd1.Parameters.AddWithValue("@kco", txtKCO.Text);

       o_cmd1.ExecuteNonQuery();
   }

}

还要确保正确处理连接和命令对象(使用:) using关键字)

有关详细信息,请阅读MSDN中的文档 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx