2013-03-06 210 views
0

我正在尝试将项目填充到数据网格中,然后使用2个按钮(一个加载,一个将保存)和一个窗体上的数据网格将它们更新回数据库。我一直在查询表达式中遇到“Syntax error(missing operator)”,我不知道为什么。另一个问题是我的DataAdapter和Dataset需要在内存中进行标注?下课?查询/更新MS Access记录

'this loads my data from db into datagrid 

    Dim con As New OleDb.OleDbConnection 
    Dim sql As String 

    con.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;data source=dbsrc.mdb" 

    con.Open() 
    sql = "SELECT * from [Employee Assignments]" 
    da = New OleDb.OleDbDataAdapter(sql, con) 
    da.Fill(ds, "Assignments") 

    con.Close() 

    DataGridView1.DataSource = ds.Tables("Assignments") 

下面的代码应该更新我的数据库,以反映

'this will eventually update the datagrid back into the db 

    Dim cb As New OleDb.OleDbCommandBuilder(da) 
    Dim con As New OleDb.OleDbConnection 

    'Dim sql As String 
    con.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;data source=dbsrc.mdb" 

    con.Open() 

    da.Update(ds, "Assignments") 

    con.Close() 

    DataGridView1.DataSource = ds.Tables("Assignments") 

我读了这个MSDN artcle DataGridView中所做的更改 - http://msdn.microsoft.com/en-us/library/system.data.common.dataadapter.update.aspx - 但它似乎并没有太大的帮助,我很困惑,但我相信我的问题不是识别并将正确的数据集传回数据库。我应该如何处理数据集,然后使用DataAdapter进行修改,然后发送回数据库?

+0

你可以尝试更改表的名称,以删除里面的空间,并检查它是否工作? – Steve 2013-03-06 16:51:06

回答

0

当表中包含空格的名称,你应该通知CommandBuilder的这个问题 设置QuotePrefix和QuoteSuffix属性,以避免错误

cb.QuotePrefix = "[" 
cb.QuoteSuffix = "]" 

这些三三两两默认为空字符串,因此,当您尝试将更改写回到数据库,您会收到语法错误。

+0

但你认为这可能是问题吗?他的数据被加载,我想在datagrid中正确 – DevelopmentIsMyPassion 2013-03-06 16:58:08

+0

如果你注意到select查询有方括号。这是由CommandBuilder自动生成的更新查询会变得混乱。 – Steve 2013-03-06 16:59:27

+0

是的,我注意到它,但不知道这是否可能是问题时更新 – DevelopmentIsMyPassion 2013-03-06 17:00:29