WinForms 中的多个基表不支持动态 SQL 生成
Posted
技术标签:
【中文标题】WinForms 中的多个基表不支持动态 SQL 生成【英文标题】:Dynamic SQL generation is not supported against multiple base tables in WinForms 【发布时间】:2013-12-22 10:22:43 【问题描述】:我正在使用 VB.NET Windows 应用程序
在我的加载事件中,我提供了这样的代码,用于将不同表中的数据加载到我的DataGridView
。
为此,我使用如下代码:
Dim cmd As New SqlCommand("select M.Model,c.Colname,ma.Make from Model_tbl M join Color_tbl C on c.colid=M.mdlid join Make_tbl ma on ma.mkid=c.colid where mdlid=5", con.connect)
Dim builder As SqlClient.SqlCommandBuilder = New SqlCommandBuilder(da)
da.SelectCommand = cmd
da.Fill(ds, "MyTable")
If (ds.Tables(0).Rows.Count > 0) Then
DGV.DataSource = ds.Tables("MyTable")
End If
单击更新按钮时,我想将数据从我的DataGridView
更新到不同的表。所以我在我的更新按钮事件中写了这样的代码。
Me.Validate()
Me.da.Update(Me.ds.Tables("MyTable"))
Me.ds.AcceptChanges()
但在这一行
Me.da.Update(Me.ds.Tables("MyTable"))
我收到一个错误:
不支持对多个基表进行动态 SQL 生成。
我的代码有什么问题?
【问题讨论】:
【参考方案1】:当 SELECT 命令包含两个或多个表之间的 JOINS 时,SqlCommandBuilder
无法生成 DataAdapter 更新命令所需的 UPDATE/INSERT 语句。
在 MSDN 你可以阅读
SqlCommandBuilder 自动生成
single-table commands
用于协调对 DataSet 所做的更改与关联的 SQL Server 数据库。
解决方法是自己提供属性的命令
SqlDataAdapter.UpdateCommand
SqlDataAdapter.InsertCommand
SqlDataAdapter.DeleteCommand
【讨论】:
当我给出这个显示时:属性访问必须分配给属性或使用它的值。以上是关于WinForms 中的多个基表不支持动态 SQL 生成的主要内容,如果未能解决你的问题,请参考以下文章