OscarDataAdapter¶
OscarDataAdapter 用于获取数据源中的数据并填充 DataSet 中的
DataTable 对象和约束,还可以将 DataSet
产生的改变解析回数据源.它使用 .NET DATA PROVIDER 的 OscarConnection
对象连接数据源,使用 OscarCommand 对象获取 DataSet
对象中的数据并将 DataSet 对象中数据的变化返回给数据源. DataSet
与 OscarDataReader 的区别在于 OscarDataReader 对象使用
OscarConnection
直接访问数据,不必使用OscarDataAdapter.OscarDataAdapter
实际上将 DataSet 对象与实际数据源断开.
OscarDataAdapter 的 SelectCommand 属性是一个从数据源中获取数据的
Command 对象.神通数据库 DataAdapter 的
InsertCommand,UpdateCommand 和 DeleteCommand 属性也是
Command 对象,他们根据对 DataSet
中数据的修改来更新数据源中的数据.OscarDataAdapter 的Fill
方法用于将 OscarDataAdapter 中的 SelectCommand 的结果填充到
DataSet, 它也用于添加或者刷新 DataSet 中的行以匹配数据源中的行.
OscarDataAdapter 的 FillSchema 方法用于将 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();
}
}
}
}
引用