执行命令

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()

OscarCommand 实例执行 ExecuteReader() 获得 OscarDataReader 对象.
示例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();
    }
}
引用