2014-02-05 70 views
0

我有從訪問數據庫中的表中加載數據的vb.net應用程序。該表有一個主鍵ID,它是一個自動增量列。我更新用下面的代碼中的數據表:具有自動增加列的VB.Net更新數據庫表

daAdapter.Update(dsOptions.Tables("notes")) 

但出現以下錯誤:「語法錯誤INSERT INTO語句中」 我該如何解決呢? enter image description here

+0

什麼是用於初始化daAdapter的sql命令? 「SELECT ???? FROM ????」? – Steve

+0

yes:sql =「select * from notes」,然後用結果填充數據集。並將此表設置爲datagridview的數據源 –

+1

對不起,但我認爲可能在筆記表中有一個保留名稱的字段。你能告訴我什麼是表格筆記的列名?你可以在調用之前添加更新以下行'Console.WriteLine(daAdapter.InsertCommand.CommandText)',並在輸出窗口中檢查結果 – Steve

回答

0

當您的表格包含Reserved Keywords像DESC和TYPE是必要的通知OleDbDataAdapter使用特殊字符來隔離列名稱。

例如。假設你建立適配器以這種方式

Using con = new OleDbConnection(.....) 
Using cmd = new OleDbCommand("SELECT * FROM NOTES", con 
    con.Open 
    daAdapter = new OleDbDataAdapter(cmd) 
    Dim builder = new OleDbCommandBuilder(daAdapter) 
    builder.QuotePrefix = "[" 
    builder.QuoteSuffic = "]" 
    daAdapter.InsertCommand = builder.GetInsertCommand() 
    .... rest of the code that fills the grid 

現在,當您嘗試調用名爲daAdapter的OleDbDataAdapter的方法更新InserCommand文本將是這樣的

INSERT INTO [NOTES] ([soccerID], [Type], [Desc]) VALUES (?,?,?) 

廣場的存在括號可防止語法錯誤。還要注意,如果你用其他方法更新你的行,那麼你需要在全局級別聲明變量daAdapter

+0

沒錯,它解決了這個問題。因此,無論何時保留關鍵字,我都必須使用[]或builder.QuotePrefix =「[」 builder.QuoteSuffic =「]」 daAdapter.InsertCommand = builder.GetInsertCommand()。 –

+1

或者更好避免使用保留字 –

+1

如果仍然有可能,這是第一件要做的事情。有時候,當你有一個大的應用程序,它太晚,太昂貴了 – Steve