2013-02-05 66 views
-1

我知道這個問題已經被問了一百次,我已經看了他們所有人,不知道發生了什麼問題。 這是表中訪問:OledbCommandBuilder插入到語句C#中的語法錯誤?

tbl_Slip 

SlipNo*, 
EmpID, 
ScaleID, 
Month-Year, 
RaiseBasic, 
OtherDed, 
Tax, 
Arrears, 
Notes, 

所有字段是除月 - 年,並記錄哪些是文本整數類型。

現在C#部分: 這是我使用的代碼。 我試圖找出錯誤,所以做了一個與harcoded值的按鈕。

(該OleDbConnection的工作正常。我用它來在窗體上顯示的數據)

此功能我使用鏈接到tbl_Slip。

private void linkToSlip() 
    { 
     con.Open(); 

     string sqlRecords = "Select * FROM tbl_Slip ORDER BY SlipNo"; 
     SlipDA = new OleDbDataAdapter(sqlRecords, con); 
     SlipDA.Fill(SlipDS, "Slip"); 

     // Primary key so DataTable.Rows.Find[] can be used 
     SlipDS.Tables["Slip"].PrimaryKey = new DataColumn[] { SlipDS.Tables["Slip"].Columns["SlipNo"] }; 
     maxSlipRows = SlipDS.Tables["Slip"].Rows.Count; 

     dataGrid_Slip.DataSource = SlipDS; 
     dataGrid_Slip.DataMember = "Slip"; 

     con.Close(); 
    } 

這是形式負載部分:

private void frm_Slip_Load(object sender, EventArgs e) 
    { 
     SlipDS = new DataSet(); 
     createcon(); 
     linkToSlip(); 
    } 

(createcon是我使用,使任意不等階數據庫的連接的功能)

這是按鈕的代碼:

private void button1_Click(object sender, EventArgs e) 
    { 
     OleDbCommandBuilder saveCB = new OleDbCommandBuilder(SlipDA); 

     DataRow dR = SlipDS.Tables["Slip"].NewRow(); 

     dR[0] = Convert.ToInt32("2"); 
     dR[1] = Convert.ToInt32("1"); 
     dR[2] = Convert.ToInt32("1"); 
     dR[3] = "January-2013"; 
     dR[4] = Convert.ToInt32("15"); 
     dR[5] = Convert.ToInt32("20"); 
     dR[6] = Convert.ToInt32("2"); 
     dR[7] = Convert.ToInt32("223"); 
     dR[8] = "notes"; 

     SlipDS.Tables["Slip"].Rows.Add(dR); 
     saveCB.DataAdapter.Update(SlipDS.Tables["Slip"]); 
     maxSlipRows++; 
    } 

當我按下按鈕給出的錯誤是

INSERT INTO語句中的語法錯誤。

我找不出什麼問題。我檢查了重複,我檢查了數據是否保存在SlipDS.Tables [「Slip」](IT WAS)中。我想不出其他什麼。

出了什麼問題?

+2

你知道'dR [0] = Convert.ToInt32(「2」);'與'dr [0] = 2;'相同,只使用更多的單詞和運行時間? –

+0

是的,我做 但我嘗試了一切,可以使其功能! –

回答

0

快速回答:請勿使用OleDbCommandBuilder。手動創建OleDbCommand作爲INSERT INTO ... (...) VALUES (...)並使用參數化查詢。然後,適當地添加參數。

您必須告訴我們INSERT聲明,以便我們可以告訴它有什麼問題。

+0

我寫了一個簡單的代碼來插入值,它的工作,但你能告訴我爲什麼我的第一種方法失敗。我在其他形式上使用Oledbcommandbuilder,它工作? 此外,爲什麼我應該使用參數,而不是隻提供聲明中的值? 謝謝 –

+0

爲什麼使用參數?那麼,鍵入安全性,SQL注入等...如何使用SO搜索功能,看看如何使其工作?這個問題已經被問了很多次。 –

0

我敢打賭,對於無效命令,問題是你的字段名稱中有一個連字符,並且可能沒有被正確創建並解釋爲

insert into tbl_Slip (EmpID, ScaleID, Month-Year, ... 

壞主意,有列與空格和/或連字符。是的,數據庫允許它,但是你不必爲了自己的利益而在自己的腳上射擊。