簡體   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