台灣最大程式設計社群網站
線上人數
1069
 
會員總數:239364
討論主題:185703
歡迎您免費加入會員
討論區列表 >> C# >> c# access 資料庫連接
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
c# access 資料庫連接
價值 : 100 QP  點閱數:198 回應數:7

樓主

金色狂風
門外漢
0 1
21 3
發送站內信



不好意思,新手有問題想請教各位

我現在有在做一個庫存查詢系統,有製作一個庫存資料修改表單

當我要新增欄位時,如果主鍵打一樣的數值會因為數值相同而無法新增欄位

所以我有利用程式碼先查詢資料表中的主鍵是否有重複,再看看是否能新增,可是會出現以下

類型 'System.Data.OleDb.OleDbException' 的未處理例外狀況發生於 System.Data.dll

其他資訊: 查詢運算式 '[商品編號]='A61' and [產品名稱]='' 中的 字串語法錯誤。

想請問各位大大我該如何解決?


private void btn更新_Click(object sender, EventArgs e)
{
if (txb商編.Text == "")
{
MessageBox.Show("商品編號為必填欄位");
}
else
{
OleDbConnection conn;
string str = "Provider=Microsoft.Jet.OData Source=系統分析 新.accdb";
conn = new OleDbConnection(str);

conn = new OleDbConnection(ConnString.ConnectionString);
OleDbDataReader dr = null;
conn.Open();
OleDbCommand cmd = new OleDbCommand("Select * From 庫存資料表 Where [商品編號]='" + txb商編.Text + "' and [產品名稱]='" + txb商名.Text + "", conn);
dr = cmd.ExecuteReader();
if (!dr.Read())
{
this.庫存資料表BindingSource.EndEdit();
this.庫存資料表TableAdapter.Update(this.系統分析_新DataSet.庫存資料表);
cmd.Dispose();
dr.Close();
conn.Close();
conn.Dispose();
}
else
{
MessageBox.Show("商品編號不可重複");
}
}
}

搜尋相關Tags的文章: [ c# ] , [ access ] ,
本篇文章發表於2017-01-07 21:43
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

Ader Chen
檢舉此回應
可能是最後兩個雙引號中間漏掉一個單引號
"' and [產品名稱]='" + txb商名.Text + "'"
本篇文章回覆於2017-01-07 23:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

金色狂風
檢舉此回應
感謝大大的回應~
我增加了一個單引號,可是程式還是會掛掉
我不太確定這一行程式碼到底有沒有抓到資料庫裡的欄位
OleDbCommand cmd = new OleDbCommand("Select * From 庫存資料表 Where [商品編號]='" + txb商編.Text + "' and [產品名稱]='" + txb商名.Text + "", conn);
dr = cmd.ExecuteReader();
還是有什麼其它的寫法可以去驗證資料庫的欄位有沒有重複??
本篇文章回覆於2017-01-08 00:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

金色狂風
檢舉此回應
感謝大大Ader Chen ~~~, 按照你的解答已經成功執行了
對了,我另外做了帳密驗證,但是會有語法問題,可是我看不出來錯在哪,請問我該如何解決?
"Select * From 帳密 Where [帳號]='" + txb1.Text + "' and [密碼]='" + txb2.Text + ""+"' and [職位] = '" + txb3.text + "'", conn);
本篇文章回覆於2017-01-08 10:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

Ader Chen
檢舉此回應
可否(例如在conn.Open)下中斷點,然後逐步執行,看是在哪一行出現錯誤?
我習慣用 ExecuteScalar查資料是否存在,不過您用 Reader也行 (稍微耗資源), 主要需先查出在那裡發生錯誤,
本篇文章回覆於2017-01-08 10:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Ader Chen
檢舉此回應
…3樓程式一樣漏掉單引號… 找找看在哪裡 Bp
本篇文章回覆於2017-01-08 11:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

Ader Chen
檢舉此回應
Sorry, 5樓回太快了, 請忽略...

OleDbConnection conn = new OleDbConnection(ConnString.ConnectionString);
OleDbCommand cmd = new OleDbCommand("Select * From [帳密] Where [帳號]='" + txb1.Text + "' and [密碼]='" + txb2.Text + "' and [職位] = '" + txb3.text + "'", conn);

若用組字串方式, 帳號、密碼、職位等內容如果包含 " ' [ ] 之類的符號, 有可能會造成 SQL 解析斷句/語法錯誤,

從善如流提醒: 組字串方式會有 sql injection 風險, 請搜尋論壇相關討論改用參數式查詢.

本篇文章回覆於2017-01-08 11:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

金色狂風
檢舉此回應
好的,十分感謝您的意見,我再嘗試看看~
本篇文章回覆於2017-01-08 14:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.