一、 特点介绍
> ⒈ 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 ** 语句并返回受影响的行数。对于 ** UPDATE ** 、 ** INSERT ** 和 ** DELETE ** 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -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 。默认为 NVarChar 。 SqlDBType 和 DbType 是相互连接的。设置 DBtype 会将 SqlDbType 更改为支持的 SqlDbType 。
>
> ⑦ Value :获取或设置该参数的值。默认为空。
Ⅱ方法
Ⅲ事件