繁体   English   中英

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

[英]Insert into access database Query Error in C#

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();

我在插入语句中收到语法错误,我不明白如果有任何人帮我,那是什么错误,我真的非常感谢full.Thanks。

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

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

使用命令参数而不是串联字符串。 您的代码已接受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/zh-cn/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v=vs.110).aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM