Share via


OdbcCommandBuilder 类

自动生成用于协调对 DataSet 的更改与关联的数据源的单表命令。无法继承此类。

**命名空间:**System.Data.Odbc
**程序集:**System.Data(在 system.data.dll 中)

语法

声明
Public NotInheritable Class OdbcCommandBuilder
    Inherits DbCommandBuilder
用法
Dim instance As OdbcCommandBuilder
public sealed class OdbcCommandBuilder : DbCommandBuilder
public ref class OdbcCommandBuilder sealed : public DbCommandBuilder
public final class OdbcCommandBuilder extends DbCommandBuilder
public final class OdbcCommandBuilder extends DbCommandBuilder

备注

OdbcDataAdapter 不会自动生成为了协调对 DataSet 所作的更改和关联数据源所必需的 SQL 语句。但是,您可以创建 OdbcCommandBuilder 对象,该对象通过设置 OdbcDataAdapterSelectCommand 属性为单表的更新生成 SQL 语句。然后,OdbcCommandBuilder 会生成您没有设置的任何其他 SQL 语句。

OdbcDataAdapter 及其相应 OdbcCommandBuilder 之间的关系始终为一对一。要创建这种对应关系,请设置 OdbcCommandBuilder 对象的 OdbcDataAdapter 属性。这会导致 OdbcCommandBuilder 将自身注册为侦听器,该侦听器生成影响 DataSetRowUpdating 事件的输出。

为了生成 INSERT、UPDATE 或 DELETE 语句,OdbcCommandBuilder 使用 SelectCommand 属性检索所需的元数据集。如果在检索到元数据后(例如,在第一次更新后)更改 SelectCommand 的值,则应调用 RefreshSchema 方法来更新元数据。

提示

如果分配给 SelectCommand 属性的 SELECT 语句使用列名称的别名,得到的 INSERT、UPDATE 和 DELETE 语句可能会不准确或失败。如果基础 ODBC 驱动程序不能为列名称的别名提供适当的基列名称(使用 SQLColAttribute 的 SQL_DESC_BASE_COLUMN_NAME 值),别名可能会用在生成的 INSERT、UPDATE 和 DELETE 语句中。例如,用于 Oracle 的 Microsoft ODBC 驱动程序返回别名作为基列名称。因此,生成的 INSERT、UPDATE 和 DELETE 语句将导致错误。

OdbcCommandBuilder 还使用由 SelectCommand 引用的 ConnectionCommandTimeoutTransaction 属性。如果修改了这些属性中的一个或多个,或者如果更改了 SelectCommand 属性本身的值,用户应该调用 RefreshSchema。否则,InsertCommandUpdateCommandDeleteCommand 属性都保留它们以前的值。

如果调用 Dispose,则会解除 OdbcCommandBuilderOdbcDataAdapter 的关联,并且不再使用生成的命令。

示例

下面的示例使用 OdbcCommand 以及 OdbcDataAdapterOdbcConnection 从数据源选择行。向该示例传递已初始化的 DataSet、一个连接字符串、一个查询字符串(它是一个 SQL SELECT 语句)和一个表示数据源表的名称的字符串。然后,该示例创建一个 OdbcCommandBuilder

Public Function SelectOdbcSrvRows( _
    ByVal connectionString As String, ByVal queryString As String, _
    ByVal tableName As String) As DataSet

    Dim dataSet As DataSet = New DataSet

    Using connection As New OdbcConnection(connectionString)
        Dim adapter As New OdbcDataAdapter()
        adapter.SelectCommand = _
            New OdbcCommand(queryString, connection)
        Dim builder As OdbcCommandBuilder = _
            New OdbcCommandBuilder(adapter)

        connection.Open()

        adapter.Fill(dataSet, tableName)

        ' Code to modify data in DataSet here 

        ' Without the OdbcCommandBuilder this line would fail.
        adapter.Update(dataSet, tableName)
    End Using

    Return dataSet
End Function
public static DataSet SelectOdbcSrvRows(string connectionString,
    string queryString, string tableName)
{
    DataSet dataSet = new DataSet();
    using (OdbcConnection connection = new OdbcConnection(connectionString))
    {
        OdbcDataAdapter adapter = new OdbcDataAdapter();
        adapter.SelectCommand =
            new OdbcCommand(queryString, connection);
        OdbcCommandBuilder builder =
            new OdbcCommandBuilder(adapter);

        connection.Open();

        adapter.Fill(dataSet, tableName);

        //code to modify data in DataSet here

        //Without the OdbcCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);
    }
    return dataSet;
}

继承层次结构

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Data.Common.DbCommandBuilder
        System.Data.Odbc.OdbcCommandBuilder

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1

请参见

参考

OdbcCommandBuilder 成员
System.Data.Odbc 命名空间

其他资源

自动生成命令