仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1163|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之ADO.NET念书条记系列之------SqlComman...

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持多种存储引擎。ado|command|条记|工具
1、特性先容

⒈SqlCommand:暗示要对SQLServer数据库实行的一个Transact-SQL语句或存储历程。

⒉SqlDataReader:供应一种从数据库读取只进的行流的一种体例。若要创立SqlDataReader,必需挪用SqlCommand工具的ExecuteReader办法,而不间接利用机关函数。应当尽量敏捷的封闭SqlDataReader工具。

⒊SqlParameter:暗示SqlCommand的参数,也能够是它到DataSet列的映照。



2、利用先容

⒈创立SqlCommand工具:

stringstrConn,strSQL;

strConn=”…………”;

strSQL=”SelectCustomerID,CompanyNamefromCustomers”;

SqlConnectioncn=newSqlConnection(strConn);

cn.Open();

SqlCommandcmd;



cmd=newSqlCommand();

cmd.CommandText=strSQL;

cmd.Connection=cn;



cmd=newSqlCommand(strSQL,cn);

⒉实行无前往行的查询:

stringstrConn,strSQL;

strConn=”……”;

strSQL=”UpdateCustomersSETCompanyNme=’NewName’whereCustomersID=’ALFKI’”;

SqlConnectioncn=newSqlConnection(strConn);

cn.Open();

SqlCommandcmd=newSqlCommand(strSQL,cn);

intRecordsAffercted=cmd.ExecuteNonQuery();

if(RecordsAffercted==1)

……

else

…………

⒊用SqlDataReader工具反省查询了局:

①猎取了局

stringstrConn,strSQL;

strConn=”……”;

SqlConnectioncn=newSqlConnection(strConn);

cn.Open();

strSQL=”SelectCustomerID,CompanyNamefromCustomers”;

SqlCommandcmd=newSqlCommand(strSQL,cn);

SqlDataReaderrdr=cmd.ExecuteReader();

While(rdr.Read())

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

Rdr.Close();

②更快猎取

Ⅰ利用基于序号的查找

……

SqlDataReaderrdr=cmd.ExecuteReader();

intCustomerIDOrdinal=rdr.GetOrdinal(“CustomerID”);

intCompanyNameOrdinal=rdr.GetOrdinal(“CompanyName”);

while(rdr.Read())

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

rdr.Close();

Ⅱ利用得当的范例指定Get办法

……

SqlDataReaderrdr=cmd.ExecuteReader();

intCustomerIDOrdinal=rdr.GetOrdinal(“CustomerID”);

intCompanyNameOrdinal=rdr.GetOrdinal(“CompanyNameOrdinal”);

while(rdr.Read())

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

rdr.Close();

③猎取多个了局



cn.Open();

stringstrSQL=”selectCustomerID,CompanyNamefromCustomers;”+“selectOrderID,CustomerIDfromOrders;”;

SqlCommandcmd=newSqlCommand(strSQL,cn);

SqlDataReaderrdr=cmd.ExecuteReader();

do

{

while(rdr.Read())

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

Console.WriteLine();

}while(rdr.NextResult());

⒋实行前往单值的查询:



cn.Open();

SqlCommandcmd=newSqlCommand(“selectcount(*)fromcustomers",cn);

intCustomres=Convert.ToInt32(cmd.ExecuteScalar());

⒌实行参数化查询和挪用存储历程:

SqlCommandcmd=newSqlCommand("DelQXRY",cn);

cmd.CommandType=CommandType.StoredProcedure;

SqlParameterparameterRoleID=newSqlParameter("@ID",SqlDbType.Int,4);

parameterRoleID.Value=444;

cmd.Parameters.Add(parameterRoleID);

cn.Open();

cmd.ExecuteNonQuery();

⒍从输入参数中猎取数据:

CreateProcedureGetCustomer(@CompanyNamenvarchar(30)output,@CustomerIDnchar(5))ASSELECT@CompanyName=CompanyNamefromCustomerswhereCustomerID=@CustomerID



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

 

⒎在Transaction中实行查询:



cn.Open();

SqlTransactiontxn=cn.BeginTransaction();

StringstrSQL=”InsertintoCustomers(…)values(…)”;

SqlCommandcmd=newSqlCommand(strSQL,cn,txn);

intRecordAffected=cmd.ExecuteNonQuery();

if(RecordAffected==1)

{

txn.Commit();

}

else

{

txn.RollBack();

}



3、属性办法事务先容

⒈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。

publicSqlDataReaderExecuteReader(CommandBehavior);



⑤ExecuteScalar:实行查询,并前往查询所前往的了局会合第一行的第一列。疏忽分外的列或行。

⑥ExecuteXmlReader:将CommandText发送到Connection并天生一个XmlReader。

⑦PrePare:在SQLServer的实例上创立命令的一个筹办版本。在挪用Prepare之前,应指定要筹办的语句中的每一个参数的数据范例。

⑧ResetCommandTimeOut:将CommandTimeout属性设置为默许值30秒。



Ⅲ事务

⒉SqlDataReader

Ⅰ属性

①Depth:猎取一个值,该值唆使以后行的嵌套深度。最外层表的深度为零。SQLServer.NETFramework数据供应程序不撑持嵌套并老是前往零值。

②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:猎取或设置该参数的值。默许为空。

Ⅱ办法

Ⅲ事务
支持多种存储引擎。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-19 19:04:48 | 只看该作者
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
板凳
发表于 2015-1-28 09:42:04 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
飘灵儿 该用户已被删除
地板
发表于 2015-2-5 19:21:24 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
只想知道 该用户已被删除
5#
发表于 2015-2-13 06:39:55 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
因胸联盟 该用户已被删除
6#
发表于 2015-3-3 18:09:26 | 只看该作者
我个人认为就是孜孜不懈的学习
简单生活 该用户已被删除
7#
 楼主| 发表于 2015-3-11 12:23:49 | 只看该作者
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
兰色精灵 该用户已被删除
8#
发表于 2015-3-18 11:50:54 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
小妖女 该用户已被删除
9#
发表于 2015-3-25 20:06:44 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表