数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
ADO.NET读书笔记系列之------SqlCommander和SqlDataReader对象

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

一、特点介绍

SqlCommand:表示要对SQL Server数据库执行的一个Transact-SQL语句或存储过程。

SqlDataReader:提供一种从数据库读取只进的行流的一种方式。若要创建SqlDataReader,必须调用SqlCommand对象的ExecuteReader方法,而不直接使用构造函数。应该尽可能迅速的关闭SqlDataReader对象。

SqlParameter:表示SqlCommand的参数,也可以是它到DataSet列的映射。

 

二、使用介绍

⒈创建SqlCommand对象:

    string strConn,strSQL;

    strConn=”…………”;

    strSQL=”Select CustomerID,CompanyName from Customers”;

    SqlConnection cn = new SqlConnection(strConn);

    cn.Open();

    SqlCommand cmd;

   

    cmd=new SqlCommand();

    cmd.CommandText=strSQL;

    cmd.Connection=cn;

 

    cmd=new SqlCommand(strSQL,cn); 

⒉执行无返回行的查询:

    string strConn,strSQL;

    strConn=”……”;

strSQL=”Update Customers SET CompanyNme=’NewName’where CustomersID=’ALFKI’”;

    SqlConnection cn=new SqlConnection(strConn);

    cn.Open();

    SqlCommand cmd=new SqlCommand(strSQL,cn);

    int RecordsAffercted=cmd.ExecuteNonQuery();

    if(RecordsAffercted ==1)

       ……

    else

      …………

⒊用SqlDataReader对象检查查询结果:

    获取结果

string strConn,strSQL;

  strConn=”……”;

    SqlConnection cn=new SqlConnection(strConn);

  cn.Open();

  strSQL=”Select CustomerID,CompanyName from Customers”;

    SqlCommand cmd=new SqlCommand(strSQL,cn);

SqlDataReader rdr=cmd.ExecuteReader();

     While(rdr.Read())

      Console.Writeline(rdr[“CustomerID”]+rdr[“CompanyName”]);

  Rdr.Close(); 

    更快获取

Ⅰ使用基于序号的查找

    ……

    SqlDataReader rdr=cmd.ExecuteReader();

    int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);

    int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyName”);

    while(rdr.Read())

        Console.WriteLine(rdr[CustomerIDOrdinal]+rdr[CompanyNameOrdinal]);

    rdr.Close();

Ⅱ使用适当的类型指定Get方法

    ……

    SqlDataReader rdr=cmd.ExecuteReader();

    int CustomerIDOrdinal = rdr.GetOrdinal(“CustomerID”);

   int CompanyNameOrdinal = rdr.GetOrdinal(“CompanyNameOrdinal”);

    while(rdr.Read())

        Console.WriteLine(rdr.GetString(CustomerIDOrdinal)+rdr.GetString(CompanyNameOrdinal));

    rdr.Close(); 

③获取多个结果

   

    cn.Open();

    string strSQL =”select CustomerID,CompanyName from Customers;”+“select OrderID,CustomerID from Orders;”;

    SqlCommand cmd=new SqlCommand(strSQL,cn);

    SqlDataReader rdr=cmd.ExecuteReader();

    do

    {

        while(rdr.Read())

           Console.WriteLine(rdr[0]+rdr[1]);

        Console.WriteLine();

    }while(rdr.NextResult()); 

⒋执行返回单值的查询:

    …

    cn.Open();

    SqlCommand cmd=new SqlCommand(“select count(*) from customers",cn);

    int Customres = Convert.ToInt32(cmd.ExecuteScalar());   

⒌执行参数化查询和调用存储过程:

    SqlCommand cmd = new SqlCommand("DelQXRY", cn);

    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter parameterRoleID = new SqlParameter("@ID", SqlDbType.Int, 4);

    parameterRoleID.Value = 444;

    cmd.Parameters.Add(parameterRoleID);  

    cn.Open();

    cmd.ExecuteNonQuery(); 

从 输出参数中获取数据:

    Create Procedure GetCustomer(@CompanyName nvarchar(30) output,@CustomerID nchar(5)) AS SELECT @CompanyName=CompanyName from Customers where CustomerID=@CustomerID

    …

cmd.Parameters[“@CompanyName”].Direction =ParameterDirection.Output

 

⒎在Transaction中执行查询:

    …

    cn.Open();

    SqlTransaction txn=cn.BeginTransaction();

    String strSQL=”Insert into Customers(…)values(…)”;

    SqlCommand cmd=new SqlCommand(strSQL,cn,txn);

    int RecordAffected = cmd.ExecuteNonQuery();

    if(RecordAffected ==1)

    {

        txn.Commit();

    }

    else

    {

        txn.RollBack();

    }

 

三、属性方法事件介绍

SqlCommand

Ⅰ属性

    ①CommandText: 要执行的 Transact-SQL 语句或存储过程。默认为空字符串。

    ②CommandTimeOut: 等待命令执行的时间(以秒为单位)。默认为 30 秒。

    ③CommandType: CommandType 值之一。默认值为 Text

    ④Connection: 与数据源的连接。默认值为空引用

    ⑤Parameters: Transact-SQL 语句或存储过程的参数。默认为空集合。

    ⑥Transaction:指定用于查询的事务处理

    ⑦UpdateRowSource:如果通过调用DataAdapter对象的Update方法来使用Command,那么该属性就用于控制影响当前DataRow的查询结果(默认值为Both)

 

Ⅱ方法

Cancel: 试图取消SqlCommand的执行。如果没有要取消的内容,则什么都不会发生。但如果有命令正在执行,而取消尝试失败,则不会生成异常。Cancel方法还会导致Command对象删除DataReader对象上所有未读的行。

CreateParameter:为查询创建一个新参数。

ExecuteNonQuery:对连接执行Transact-SQL语句并返回受影响的行数。对于 UPDATEINSERTDELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

ExecuteReader:CommandText发送到Connection并生成一个SqlDataReader

  public SqlDataReader ExecuteReader(CommandBehavior);

ExecuteScalar:执行查询,并返回查询所返回的结果集中第一行的第一列。忽略额外的列或行。

ExecuteXmlReader:CommandText发送到Connection并生成一个XmlReader

PrePare:SQL Server 的实例上创建命令的一个准备版本。在调用 Prepare 之前,应指定要准备的语句中的每个参数的数据类型。

ResetCommandTimeOut:CommandTimeout属性设置为默认值30秒。

 

Ⅲ事件

SqlDataReader

Ⅰ属性

Depth:获取一个值,该值指示当前行的嵌套深度。最外层表的深度为零。SQL Server .NET Framework 数据提供程序不支持嵌套并总是返回零值。

FieldCount获取当前行中的列数。如果未放在有效的记录集中,则为 0;否则为当前行中的列数。默认值为 -1。执行不返回行的查询后,FieldCount 返回 0。

HasRows:如果SqlDataReader包含一行或多行,则为true;否则为false

IsClosed:如果SqlDataReader已关闭,则为true;否则为false

Item获取以本机格式表示的列的值。

RecordsAffected已更改、插入或删除的行数;如果没有任何行受到影响或语句失败,则为 0;-1 表示 SELECT 语句

Ⅱ方法

Close:关闭SqlDataReader对象。如果返回值和查询影响的记录的数量不重要,则可以在调用Close方法前调用关联的SqlCommand对象的Cancel方法,从而减少关闭SqlDataReader所需要的时间。

GetName:获取指定列的名称。

GetOrdinal:在给定列名称的情况下获取列序号。

GetValue:获取以本机格式表示的指定列的值。

GetValues:获取当前行的集合中的所有属性列。

IsDBNull:获取一个值,该值指示列中是否包含不存在的或缺少的值。如果指定的列值与DBNull等效,则为true;否则为false

NextResult:当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果。如果存在多个结果集,则为 true;否则为 false

Read:使SqlDataReader前进到下一条记录,如果存在多个行,则为true;否则为false。必须调用Read来开始访问任何数据。在某一时间,每个关联的SqlConnection只能打开一个SqlDataReader,在上一个关闭之前,打开另一个的任何尝试都将失败。

Ⅲ事件

SqlParameter

Ⅰ属性

DbType:获取或设置参数的DbType。默认值为String

Direction:获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。默认值为 Input

IsNullable获取或设置一个值,该值指示参数是否接受空值。如果接受空值,则为 true;否则为 false。默认为 false

ParameterName获取或设置 SqlParameter 的名称。

Size获取或设置列中数据的最大大小(以字节为单位)。默认值是从参数值推导出的。

SqlDbType:获取或设置参数的SqlDbType。默认为NVarCharSqlDBTypeDbType是相互连接的。设置DBtype会将SqlDbType更改为支持的SqlDbType

Value:获取或设置该参数的值。默认为空。

Ⅱ方法

Ⅲ事件




相关文章

相关软件