c#.net command 命令

来源:互联网 发布:linux进程 编辑:程序博客网 时间:2024/06/06 02:17

前言

命令 (ADO.NET)

建立与数据源的连接后,可以使用 DbCommand 对象来执行命令并从数据源中返回结果。 您可以使用命令构造函数之一为要使用的 .NET Framework 数据提供程序创建命令。 构造函数可以采用可选参数,如要在数据源中执行的 SQL 语句、DbConnection 对象或 DbTransaction 对象。 您也可以将这些对象配置为命令的属性。

也可以使用 DbConnection 对象的 CreateCommand 方法创建用于特定连接的命令。 由命令执行的 SQL 语句可以使用CommandText 属性进行配置。

执行命令 (ADO.Net)

包含在 .NET Framework 中的每个 .NET Framework 数据提供程序都拥有自己的继承自 DbCommand 的命令对象。 用于OLE DB 的 .NET Framework 数据提供程序包括 OleDbCommand 对象,用于 SQL Server 的 .NET Framework 数据提供程序包括SqlCommand 对象,用于 ODBC 的 .NET Framework 数据提供程序包括 OdbcCommand 对象,用于 Oracle 的 .NET Framework 数据提供程序包括 OracleCommand 对象。 其中每个对象都根据命令的类型和所需的返回值公开用于执行命令的方法,如下表所述。 

命令

返回值

ExecuteReader

返回一个 DataReader 对象

ExecuteScalar

返回一个标量值

ExecuteNonQuery

执行不返回任何行的命令

ExecuteXMLReader

返回 XmlReader。 只用于 SqlCommand 对象

每个强类型命令对象还支持指定如何解释命令字符串的 CommandType 枚举,如下表所述。

CommandType

说明

Text

定义要在数据源处执行的语句的 SQL 命令

StoredProcedure

存储过程的名称。 您可以使用某一命令的Parameters 属性访问输入和输出参数,并返回值(无论调用哪种 Execute 方法)。 当使用ExecuteReader 时,在关闭 DataReader 后才能访问返回值和输出参数。

 

TableDirect

表的名称

 

2.1ADO.NET命令

2.1.1.Command对象:command对象继承于.NET Framework的IDbCommand类,该对象接口表示连接到数据源时执行的SQL语句。

Command对象是ADO.NET中的重要对象,它实现数据库操作,如查询、插入、修改和删除等。通常情况下可以通过

构造函数或者函数CreateCommand()创建对象Command,其中第一种为常用方式。

对象Command的属性CommandType提供三种执行命令类型:

(1)Text(文本)类型 用于执行SQL Server语句,由SQL语句构成数据库操作文本,Command对象可以把该文本直接传递给数据库,

不需要进行任何处理。

(2)Stored Procedure(存储过程)类型 用于调用并执行存储过程的命令,存储过程是一种特殊的数据库命令,可以把多个命令集中起来

一次提交给数据库,可以提供数据库的执行效率。

(3)TableDirect类型 一种特殊类型的Command命令,它从数据库返回一个完整的表,等价于Select *From TableName来调用Text类型的Command命令。

2.1.2使用Command命令对象执行SQL语句

1.ExecuteScalar()方法/函数 返回第一个结果集中第一行的第一列记录。

2.ExecuteReader()执行行的命令,返回一个DataReader对象。DataReader是一种只读的、向前的数据库记录流。

3.ExecuteNonQuery() 返回受命令影响记录的行数,它可以执行INSERT、DELETE、UPDATE、SET语句及Transact-SQL等命令。

2.2使用Command命令的Parameters方法获取数据

Command命令参数

  1.SQL语句和存储过程可以有输入输出参数以及返回值

  2.Command对象参数用来设置或者返回这些参数

 3.SqlParameter OleDbParameter

 4.Parameter对象的属性

 (1)ParameterName命令参数的名称,例如:@Catld

 (2)DbType 连接到数据库类型,例如:SqlType和OleDbType

 (3)Direction表明参数的方向——输入、输出、输入/输出或返回

 (4)Value指定参数的值

 (5)Size指定参数大小

 

实例和具体介绍

ADO.NET提供了Connection来连接数据库,同时也提供了Command对象来查询数据库。同Connection对象一样,Command也有两种:OleDbCommandSqlCommand.其区别同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>");
}

DataReaderGetInt32()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();//
切记关闭

           

                                                 2016-11-4   彼岸花  (来杭州两年了)




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 银手镯暗扣松老是掉怎么办 包包纽扣锁坏了怎么办 包的纽扣坏了怎么办 包上的纽扣坏了怎么办 洗衣服不小心用了色渍净怎么办 洗衣服不小心沾了卫生纸怎么办 麻料裤子扎皮肤怎么办 衣服没洗干净有点发光怎么办 桑蚕丝衣服脏了发光洗不掉怎么办 厨师衣服的油味怎么办 看上夜场的小姐了怎么办 楼卖完了水吧员怎么办 窗帘短了20公分怎么办 白色鞋子沾油了怎么办 面试时没有正装怎么办 宝宝喝了沐浴露怎么办 开实体童装店没人买怎么办 宝宝一岁半了还不会说话怎么办 十个月宝宝不吃辅食怎么办 八个月宝宝不吃米糊怎么办 八个月宝宝不吃辅食怎么办 六个月宝宝不吃米粉怎么办 4个月婴儿积食怎么办 黑色的衣服泛红怎么办 不听劝的人该怎么办 牛仔裙子腰大了怎么办 天猫店铺降权怎么办 淘宝做文胸的标题要怎么办 秋衣弹力衣服松了怎么办 假离婚变成真的怎么办 百家利钱不到账怎么办 皮鞋撑大了怎么办变小 鞋穿着走路掉跟怎么办 浅口帆布鞋大了怎么办 布鞋后鞋跟老掉怎么办 穿坡跟凉鞋容易打滑摔倒怎么办 运动鞋烂了个口怎么办 运动鞋的网烂了怎么办 运动鞋鞋一个一个高一个低怎么办 淘宝预售水果不发货怎么办 淘宝评价忘记晒图了怎么办