自动生成单表命令,当使用 GBASE南大通用DataSet 对象的方法将变更的内容写回到对应数据库时,需使用GBASE南大通用 GBaseCommandBuilder 进行协调关联。无法继承此类。
对于该类所有成员的列表,参考 GBaseCommandBuilder 成员。
一、继承层次
System.Object
|__ System.MarshalByRefObject
|__ System.ComponentModel.Component
|__ System.Data.Common.DbCommandBuilder
|__GBase.Data.GBaseClient.GbaseCommandBuilder
? 语法
[ Visual Basic ]
Public NotInheritable Class GBaseCommandBuilder _
Inherits DbCommandBuilder
[ C# ]
public sealed class GBaseCommandBuilder : DbCommandBuilder
? 必要条件
命名空间:GBase.Data.GBaseClient
? 线程安全性
这个类型的公共静态成员(在 Visual Basic 中为 Shared)对于多线程操作是保证线程安全的,对于实例不保证线程安全性。
? 注释
GBaseDataAdapter 不会自动生成与 DataSet 的变更相一致的 SQL 语句,必须使用 GBaseCommandBuilder 关联。要生成 INSERT、UPDATE 或 DELETE 语句时,需要用到 GBaseDataAdapter 的 SelectCommand 属性自动返回需要的元数据集。
SelectCommand 必须返回至少一个主键或者唯一列,如果没有返回,在生成更新语句时就会出现 InvalidOperation 异常,且命令不会生成。
GBaseCommandBuilder 还使用 SelectCommand 引用的 Connection、
CommandTimeout 和 Transaction 属性。如果这些属性改变了,用户应该调用RefreshSchema。否则 InsertCommand、UpdateCommand 和 DeleteCommand 属性会保持它们原先的值。
如果用户调用了 GBaseCommandBuilder 的 Dispose 方法后,GBaseCommandBuilder 会从 GBaseDataAdapter 断开,且不能再用于生成命令。
用户无论何时设置 GBaseDataAdapter 属性,GBaseCommandBuilder 都会把自己注册为 OnRowUpdating 事件的监听器。
? 示例
下面的例子演示了如何创建 GBaseCommandBuilder。
[Visual Basic]
Public Shared Function SelectRows(gsConnection As String,_
gsSelectQuery As String, gsTableName As String)_
As DataSet
Dim gsConn As New GBaseConnection(gsConnection)
Dim gsDataAdapter As New GBaseDataAdapter()
gsDataAdapter.SelectCommand = New GBaseCommand(gsSelectQuery,_
gsConn)
Dim cb As GBaseSqlCommandBuilder = New GbaseCommandBuilder_
(gsDataAdapter)
gsConn.Open()
Dim ds As DataSet = New DataSet
gsDataAdapter.Fill(ds, gsTableName)
' Code to modify data in DataSet here
' Without the GBaseCommandBuilder this line would fail.
gsDataAdapter.Update(ds, gsTableName)
gsConn.Close()
End Function 'SelectRows
[C#]
Public Static DataSet SelectRows(string gsConnection, string
gsSelectQuery,
string gsTableName)
{
GBaseConnection gsConn = new GBaseConnection(gsConnection);
GBaseDataAdapter gsDataAdapter = new GBaseDataAdapter();
gsDataAdapter.SelectCommand = new GBaseCommand(gsSelectQuery,
gsConn);
GBaseCommandBuilder cb = new
GBaseCommandBuilder(gsDataAdapter);
gsConn.Open();
DataSet ds = new DataSet();
gsDataAdapter.Fill(ds, gsTableName);
//code to modify data in DataSet here
//Without the GBaseCommandBuilder this line would fail
gsDataAdapter.Update(ds, gsTableName);
gsConn.Close();
return ds;
}