OscarDataAdapter

OscarDataAdapter 用于获取数据源中的数据并填充 DataSet 中的 DataTable 对象和约束,还可以将 DataSet 产生的改变解析回数据源.它使用 .NET DATA PROVIDER 的 OscarConnection 对象连接数据源,使用 OscarCommand 对象获取 DataSet 对象中的数据并将 DataSet 对象中数据的变化返回给数据源. DataSetOscarDataReader 的区别在于 OscarDataReader 对象使用 OscarConnection 直接访问数据,不必使用OscarDataAdapter.OscarDataAdapter 实际上将 DataSet 对象与实际数据源断开.

OscarDataAdapterSelectCommand 属性是一个从数据源中获取数据的 Command 对象.神通数据库 DataAdapterInsertCommand,UpdateCommandDeleteCommand 属性也是 Command 对象,他们根据对 DataSet 中数据的修改来更新数据源中的数据.OscarDataAdapterFill 方法用于将 OscarDataAdapter 中的 SelectCommand 的结果填充到 DataSet, 它也用于添加或者刷新 DataSet 中的行以匹配数据源中的行. OscarDataAdapterFillSchema 方法用于将 OscarDataAdapter 中的 SelectCommand 的结果中的模式信息填充 DataSet.

下面的示例说明如何填充 DataSet 对象.

static void Main(string[] args)
{
    using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
    {
        connect.Open();
        try
        {
            using (var command = connect.CreateCommand())
            {
                command.CommandText = "CREATE TABLE MY_TABLE (ID INT, NAME VARCHAR(16), AGE INT, SEX BOOLEAN, MARK TIMESTAMP)";
                command.ExecuteNonQuery();

                command.CommandText = "INSERT INTO MY_TABLE VALUES (@id,@name,@age,@sex,@mark)";
                command.Parameters.Add(new OscarParameter("id", OscarDbType.Int) { Value = 1 });
                command.Parameters.Add(new OscarParameter("name", OscarDbType.VarChar) { Value = "小张" });
                command.Parameters.Add(new OscarParameter("age", OscarDbType.Int) { Value = 20 });
                command.Parameters.Add(new OscarParameter("sex", OscarDbType.Boolean) { Value = true });
                command.Parameters.Add(new OscarParameter("mark", OscarDbType.TimeStamp) { Value = DateTime.Now });
                var result = command.ExecuteNonQuery();
                command.Parameters.Clear();
            }

            DataSet dataSet = new DataSet();
            using (var adapter = new OscarDataAdapter("SELECT * FROM MY_TABLE", connect))
            {
                adapter.Fill(dataSet);
                Console.WriteLine("ID    NAME     AGE     SEX     MARK");
                foreach (DataRow row in dataSet.Tables[0].Rows)
                {
                    Console.WriteLine("{0}     {1}     {2}      {3}    {4}", row[0], row[1], row[2], row[3], row[4]);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            using (var command = connect.CreateCommand())
            {
                command.CommandText = "DROP TABLE MY_TABLE";
                command.ExecuteNonQuery();
            }
        }
    }
}
引用