我有從訪問數據庫中的表中加載數據的vb.net應用程序。該表有一個主鍵ID,它是一個自動增量列。我更新用下面的代碼中的數據表:具有自動增加列的VB.Net更新數據庫表
daAdapter.Update(dsOptions.Tables("notes"))
但出現以下錯誤:「語法錯誤INSERT INTO語句中」 我該如何解決呢?
我有從訪問數據庫中的表中加載數據的vb.net應用程序。該表有一個主鍵ID,它是一個自動增量列。我更新用下面的代碼中的數據表:具有自動增加列的VB.Net更新數據庫表
daAdapter.Update(dsOptions.Tables("notes"))
但出現以下錯誤:「語法錯誤INSERT INTO語句中」 我該如何解決呢?
當您的表格包含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
沒錯,它解決了這個問題。因此,無論何時保留關鍵字,我都必須使用[]或builder.QuotePrefix =「[」 builder.QuoteSuffic =「]」 daAdapter.InsertCommand = builder.GetInsertCommand()。 –
或者更好避免使用保留字 –
如果仍然有可能,這是第一件要做的事情。有時候,當你有一個大的應用程序,它太晚,太昂貴了 – Steve
什麼是用於初始化daAdapter的sql命令? 「SELECT ???? FROM ????」? – Steve
yes:sql =「select * from notes」,然後用結果填充數據集。並將此表設置爲datagridview的數據源 –
對不起,但我認爲可能在筆記表中有一個保留名稱的字段。你能告訴我什麼是表格筆記的列名?你可以在調用之前添加更新以下行'Console.WriteLine(daAdapter.InsertCommand.CommandText)',並在輸出窗口中檢查結果 – Steve