执行命令¶
OscarCommand 实例构造好之后,就要传递给后台执行,但是不同命令的执行方式是不同的,这是根据命令的目标决定的,以下就是几种不同的命令执行方式.
| 命令 | 返回值 |
|---|---|
| ExecuteReader | 返回一个 DataReader 对象 |
| ExecuteScalar | 返回一个标量值 |
| ExecuteNonQuery | 执行不返回任何行的命令 |
主要属性¶
| 属性 | 描述 |
|---|---|
| FetchSize | 该属性在执行select语句,读取大量数据时可用配置服务器端游标
每次获取数据量,默认情况是每次从数据库中获取50条到本地内存中
|
| CommandText | 该属性为要执行的文本命令。默认值为空字符串("").
当将 CommandType 设置为 StoredProcedure 时,
应将 CommandText 属性设置为存储过程的名称.当调用 Execute
方法时,该命令将执行此存储过程.
|
| CommandTimeout | 该属性设置等待命令执行的时间(以秒为单位).如果不进行手动设置,
则取该Command对象所在的Connection中连接字符串中
设置的CommandTimeOut值.
|
| CommandType | 该属性的值为CommandType值之一,默认为text.
当将 CommandType 设置为 StoredProcedure 时,应将
CommandText 属性设置为存储过程的名称.当调用 Execute 方法时,
该命令将执行此存储过程.CommandType属性设置为 TableDirect 时,
应将 CommandText属性设置为要访问的表的名称.
如果已命名的任何表包含任何特殊字符,那么用户可能需要使
用转义符语法或包括限定字符.
当您调用“执行”(Execute)方法时,将返回命名表的所有行和列.
|
| Connection | 该属性为与该OscarCommand对象关联的与数据源的连接
|
ExecuteReader()¶
示例1
using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
{
connect.Open();
using (var command = connect.CreateCommand())
{
command.CommandText = "SELECT * FROM MY_TABLE";
using (OscarDataReader reader = command.ExecuteReader())
{
Console.WriteLine("ID NAME AGE SEX MARK");
while (reader.Read())
{
var vals = new object[5];
reader.GetValues(vals);
Console.WriteLine("{0} {1} {2} {3} {4}", vals);
}
}
command.CommandText = "DROP TABLE MY_TABLE";
command.ExecuteNonQuery();
}
}
ExecuteScalar()¶
OscarCommand 实例执行
ExecuteScalar() 获得结果集第一行第一列 object 对象.示例2
using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
{
connect.Open();
using (var command = connect.CreateCommand())
{
command.CommandText = "SELECT NAME FROM MY_TABLE";
var name = command.ExecuteScalar();
Console.WriteLine(name);
}
}
ExecuteNonQuery()¶
OscarCommand 实例执行
ExecuteNonQuery() 获得执行影响的行数.示例3
using (var connect = new OscarConnection("Server=10.1.1.66;Port=2003;User Id=SYSDBA;Password=szoscar55;Database=OSRDB;"))
{
connect.Open();
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();
}
}
引用