分享
 
 
 

ADO.NET读书笔记系列之------SqlCommander和SqlDataReader对象

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一、特点介绍

⒈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:获取或设置该参数的值。默认为空。

Ⅱ方法

Ⅲ事件

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有