首页 > 编程语言 >c#.net command 命令详细分析(2)

c#.net command 命令详细分析(2)

时间:2023-09-28 10:36:34浏览次数:34  
标签:c# cmd Connection command reader new net SqlCommand con


实例和具体介绍

ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库。同Connection对象一样,Command也有两种:OleDbCommand和SqlCommand.其区别同Connection对象。

要操纵数据库,必须先使用Connection来连接到数据库,再创建一个Command来查询。有几种创建方式,例:

SqlCommand cmd;
string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
string strqry="select * from Categories";
SqlConnection con=new SqlConnection(strCon);
con.Open();
¹cmd=con.CreateCommand(); //这里使用用Connection对象的CreateCommand方法来创建一个Command对象。
cmd.CommandText=strqry;
SqlDataReader reader=cmd.ExecuteReader();
² cmd=new SqlCommand();   //直接使用new 关键字来创建
cmd.CommandText=strqry;
cmd.Connection=con;   //设置与数据库的连接
³cmd=new SqlCommand(strqry,con);//直接在new的时候带两个参数来创建

执行方式:

cmd.ExecuteReader();cmd.ExecuteNonQuery();cmd.ExecuteScalar();
cmd.ExecuteXmlReader();)

1,ExecuteReader();返回一个SqlDataReader对象或OleDbDataReader对象,这个看你的程序的需要去做。可以通过这个对象来检查查询结果,它提供了“游水”式的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。

使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:一种是基于序号的查找,一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。例:

int id=reader.GetOrdinal("CategoryName");
while(reader.Read())
{
   Response.Write(reader[id]);
}
reader.Close();

至于第二种方式很直观,例:

while(reader.Read())
{
Response.Write(reader.GetInt32(0).ToString()+" "+reader.GetString(1).ToString()+" <br>");
}

DataReader的GetInt32()和GetString()通过接收一个列号来返回一个列的值,这两种是最常用的,其中还有很多其它的类型。

(注:DataReader对象在调用Close()方法即关闭与数据库的连接,如果在没有关闭之前又重新打开第二个连接,则会产生一条异常信息)

2.,ExecuteNonQuery() 这个方法并不返回一个DataReader对象,而是返回一个int类型的值,即在执行之后在数据库中所影响的行数。

例:

int affectrows=cmd.ExecuteNonQuery();
Response.Write(affectrows +" 条记录受影响");

3,ExecuteScalar() 这个方法不接受任何参数,仅仅返回查询结果集中的第一行第一列,而忽略了其它的行和列,而且返回的是一个object类型,在使用之前必须先将它强制转换为所需类型。如果返回的仅仅是一个单独的数据元,则可以使用此方法来提高代码的性能。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
string strqry="select count(*) from Categories";
SqlConnection con=new SqlConnection(strCon);
con.Open();
SqlCommand cmd=con.CreateCommand();
int i=Convert.ToInt32(cmd.ExecuteScalar());//必须强制转换

4,ExecuteXmlReader() 此方法用于XML操作,返回一个XmlReader对象,由于系统默认没有引用 System.Xml名空间,因此在使用前必须前引入。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
SqlConnection con=new SqlConnection(strCon);
con.Open();
SqlCommand cmd = new SqlCommand("select * from Categories FOR XML AUTO, XMLDATA", con);
XmlReader xr=cmd.ExecuteXmlReader();
Response.Write(xr.AttributeCount);//这里获取当前节点上的属性个数
xr.Close();

执行完毕之后,照样要显式地调用Close()方法,否则会抛出异常。

使用参数化的查询

先看一段SQL语句:select CategoryID,Description from Categories where CategoryID=? 其中的问号就是一个参数。但在使用的时候必须是带有@前缀的命名参数,因为.NET数据提供程序不支持这个通用的参数标记“?”.使用参数化的查询可以大大地简化编程,而且执行效率也比直接查询字符串要高,也更方便,很多情况下都需要更改查询字符串,这种方式就提供了方便,只需更改参数的值即可。例:

string strCon="server=localhost;database=Northwind;Trusted_Connection=Yes;";
SqlConnection con=new SqlConnection(strCon);
con.Open();
string strqry="select * from Categories where CategoryID=@CategoryID";//带参数的查询
SqlCommand cmd=new SqlCommand(strqry,con);
cmd.Parameters.Add("@CategoryID",SqlDbType.Int,4);//给参数赋于同数据库中相同的类型
cmd.Parameters["@CategoryID"].Value="3";//给参数赋值,可灵活改变
SqlDataReader r=cmd.ExecuteReader();
while(r.Read())
{
Response.Write(r.GetString(2)+"<br>");//取出指定参数列的值
}
con.Close();//切记关闭

标签:c#,cmd,Connection,command,reader,new,net,SqlCommand,con
From: https://blog.51cto.com/u_1040535/7635594

相关文章

  • c#.net command 命令详细分析(1)
    命令(ADO.NET)建立与数据源的连接后,可以使用DbCommand对象来执行命令并从数据源中返回结果。您可以使用命令构造函数之一为要使用的.NETFramework数据提供程序创建命令。构造函数可以采用可选参数,如要在数据源中执行的SQL语句、DbConnection对象或DbTransaction对象。......
  • Dubbo源码浅析(一)—RPC框架与Dubbo
    一、什么是RPC1.1RPC概念RPC,RemoteProcedureCall即远程过程调用,与之相对的是本地服务调用,即LPC(LocalProcedureCall)。本地服务调用比较常用,像我们应用内部程序(注意此处是程序而不是方法,程序包含方法)互相调用即为本地过程调用,而远程过程调用是指在本地调取远程过程进行......
  • C#正则表达式整理备忘
    有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到好几个正则表达式的帖子,那段时间借助论坛以及WroxPress出版的《C#字符串和正则表达式参考手册》学习了一些基础的知识,同时也为我在CSDN大概赚了1000分,今天想起来,去找《C#字符串和正则表达式参考手册》时,已经不知所踪了......
  • 高质量持续集成:VectorCAST与Jenkins实战指南
    持续集成(ContinuousIntegration,简称CI)是一种软件开发/测试方法。它要求开发及测试人员频繁地将代码提交到用于共享的开发分支中,经过充分的测试和审查,然后通过自动化的构建和测试流程,对代码进行构建、单元测试、集成测试等步骤以确保代码的质量和可交付性。 早在2000年代初,就有......
  • 解读C#正则表达式
    多少年来,许多的编程语言和工具都包含对正则表达式的支持,.NET基础类库中包含有一个名字空间和一系列可以充分发挥规则表达式威力的类,而且它们也都与未来的Perl5中的规则表达式兼容。   此外,regexp类还能够完成一些其他的功能,例如从右至左的结合模式和表达式的编辑......
  • 尝试用ColabPro训练深度学习模型
    Colab中使用.ipynb文件,即我们平时使用的JupyterNotebook文件来完成相关代码的执行。如果要训练模型,需要将模型封装成可以经过ipynb文件执行的形式。在具体的运行时类型中,可以选择不同的运行时,其中包含了可选的GPU和CPU。GPU中有V100、A100、T4这几种可以选择,在选择相应的资源连......
  • .NET开发者常会忽略的几个错误
    在运用Visiolstudio.NET开发Web应用程式中,开发者常常会遇到一些问题:如我开发好的程式,在开发环境下测试没问题,怎么一搬到应用环境下,就会有问题?不是程式的无法运行,就是程式的效率慢的同蜗牛在爬,这种情况在.NET的新手中尤其常见。我不知道为什么,一些介绍.NET开发的书本里引用的......
  • 正确的使用margin:0 auto与body{text-align:center;}实现元素居中
    我们首先了解一下它们的基本概念:text-align是用于设置或对象中文本的对齐方式。一般情况下我们设置文本对齐方式的时候需要用此属性进行设置,如:ExampleSourceCodediv{text-align:left;}表示文本居左对齐。margin是设置对象四边的外延边距,被称为外补丁或外边......
  • Server.Transfer和Response.Redirect的区别
    Response.Redirect简单地发送一条消息到浏览器,告诉浏览器定位到另一个页面。你可以使用下面的代码将用户引导到另一个页面:Response.Redirect("WebForm2.aspx")或者Response.Redirect("http://www.cnnas.com/")Server.Transfer也是通过一条语句将用户引导到另一页面,比如:S......
  • springcloud gateway 获取响应体进行加密操作,byte[]转换String乱码
    记录一下困扰一星期的问题!在全局过滤器中,获取响应体进行加密操作,在拿到byte[]之后转成String,控制台打印出来是乱码,编码也加了UTF-8还是报错。publicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){ServerHttpResponseoriginalResponse=ex......