必威体育Betway必威体育官网
当前位置:首页 > IT技术

ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转

时间:2019-10-26 10:14:35来源:IT技术作者:seo实验室小编阅读:61次「手机版」
 

executescalar

转载于http://www.cnblogs.com/asdyzh/p/9741641.html

ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转

using System.Data.sqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

   conn.Open();

   Sqlcommand cmd = new SqlCommand("SELECT * FROM Person.Address", conn);

   Sqldatareader reader = cmd.executeReader();

   while(reader.Read())

   console.WriteLine(reader["AddressLine1"]);

}

catch(SqlException ex)

{

   Console.WriteLine(ex.message);

}

finally

{

   conn.Close();

}

[1] ExecuteNonQuery 方法

用法:ExecuteNonQuery方法用来执行INSERT、UPDATE、DELETE和其他没有返回值得SQL命令,——比如CREATE DATABASE 和 CREATE TABLE 命令。当使用 INSERT、UPDATE、DELETE时,ExecuteNonQuery返回被命令影响的行数。对所有其他命令,返回-1。

using System.Data.SqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

conn.open();

==============================================================

-- INSERT 命令

SqlCommand cmd = new SqlCommand("INSERT INTO titles(title_id, title, type, pubdate) " + 

"VALUES('JP101', 'Programming Microsoft .NET', 'bussiness', 'May 2002')", conn);

==============================================================

-- UPDATE 命令

-- SqlCommand cmd = new SqlCommand("UPDATE titles SET title_id= 'JP2002' " + 

-- "WHERE title_id = 'JP1001'", conn);

==============================================================

-- DALETE 命令

-- SqlCommand cmd = new SqlCommand("DELETE FROM titles WHERE title_id = 'JP202'", conn);

==============================================================

cmd.ExecuteNonQuery();

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message); 

}

finally

{

conn.Close();

}

[2] ExecuteScalar 方法

用法1:ExecuteScalar 方法执行一个SQL命令返回结果集的第一列的第一行。它经常用来执行SQL的COUNT、AVG、MIN、MAX 和 SUM 函数,这些函数都是返回单行单列的结果集。

''注意:''ExecuteScalar 一般返回一个Object类型,因此必须把它转换为强类型。如果转换不正确,.NET框架就会引发 InvalidCastException异常。

using System.Data.SqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

conn.open();

SqlCommand cmd = new SqlCommand("SELECT MAX(advance) FROM titles", conn);

decimal amount = (decimal) cmd.ExecuteScalar();

Console.WriteLine("ExecuteScalar returned {0:c}", amount);

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message); 

}

finally

{

conn.Close();

}

用法2.1:ExecuteScalar 方法的另一个普遍的用法是从数据库中检索BLOB(二进制大对象)。下面的例子从Pubs数据库的Pub_Info表的Logo字段中检索图像,并把他封装到一个位图中。

MemoryStream stream = new MemoryStream();

SqlConnection conn = new SqlConnection("server=ws7\leosql;database=pubs;uid=sa;pwd=lixiang@");

try

{

conn.open();

SqlCommand cmd = new SqlCommand("SELECT logo FROM pub_info WHERE pub_id='0736'", conn);

byte[] blob = (byte[]) cmd.ExecuteScalar();

stream.Write(blob, 0, blob.Length);

Bitmap bitmap = new Bitmap(stream);

// TODO:使用位图

bitmap.Dispose();

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message); 

}

finally

{

stream.Close();

conn.Close();

}

用法2.2:您也许对如何把BLOB写入数据库感兴趣,答案是在包装了INSERT命令(该命令中包含了类型为byte[]的输入参数)的命令对象上调用ExcuteNonQuery方法。下面例子在Pubs数据库的Pub_Info表中插入一条记录,记录的Logo字段包含一个BLOB。

-- 定义和初始化blob变量

filestream stream = new FileStream("Logo.jpg", FileMode.Open);

byte[] blob = new byte[stream.Length];

stream.Read(blob, 0, (int) stream.Length);

stream.Close();

SqlConnection conn = new SqlConnection("server=ws7\leosql;database=pubs;uid=sa;pwd=lixiang@");

try

{

conn.open();

SqlCommand cmd = new SqlCommand("INSERT INTO pub_info(pub_id, logo) VALUES('9937', @logo)", conn);

cmd.parameters.Add("@logo", blob);

cmd.ExecuteNonQuery();

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message); 

}

finally

{

stream.Close();

conn.Close();

}

[3] ExecuteReader 方法

用法:ExecuteReader 方法存在的目的只有一个:尽可能快地对数据库进行查询并得到结果。ExecuteReader 返回一个DataReader对象:如果在SqlCommand对象中调用,则返回SqlDataReader;如果在OleDbCommand对象中调用,返回的是OleDbDataReader。可以调用DataReader的方法和属性迭代处理结果集。它是一个快速枚举数据库查询结果的机制,是只读、只进的。对SqlDataReader.Read的每次调用都会从结果集中返回一行。

using System.Data.SqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

conn.Open();

SqlCommand cmd = new SqlCommand("SELECT * FROM titles", conn);

SqlDataReader reader = cmd.ExecuteReader();

while(reader.Read())

 Console.WriteLine(reader["title"]);

 =================================

 -- Console.WriteLine(reader.GetName(0));

 =================================

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message);

}

finally

{

conn.Close();

}

DataReader还有一个GetValue方法可以用来检索字段的值。GetValue返回一个一般性的Object,但是被无数个返回强类型的Get方法补充,比如GetInt32和GetDecimal(参考MSDN2005)。对Getordinal的调用是必须的,因为GetDecimal只接受整型索引。GetOrdinal所做的工作正好与GetName相反——它把字段名转换成数字索引。

注意:DataReader必须处理Close方法。

using System.Data.SqlClient;

...

SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@");

try

{

conn.Open();

SqlCommand cmd = new SqlCommand("SELECT * FROM titles WHERE advance != 0", conn);

SqlDataReader reader = cmd.ExecuteReader();

int index = reader.GetOrdinal("advance");

while(reader.Read())

 Console.WriteLine("{0:c}", reader.GetDecimal(index));

 =================================

 -- Console.WriteLine(reader.GetName(0));

 =================================

''reader.Close();''

}

catch(SqlException ex)

{

Console.WriteLine(ex.Message);

}

finally

{

========================================================

-- 可以配置DataReader,使它真的可以关闭一个底层连接

-- reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

========================================================

conn.Close();

}

文章最后发布于: 2019-03-31 08:55:54

相关阅读

SqlHelper.ExecuteScalar返回插入的记录的主键

INSERT INTO T_LIMS_Inspection({0}) output INSERTED.ID  VALUES ({1});

C#中executescalar的问题

SQLCommand cmd = new SqlCommand(sql,con);使用cmd.ExecuteScalar()时如果查询结果集中的第一行第一列没有数据就会返回null,当

ExecuteScalar

ExecuteScalar执行查询,并返回查询所返回的结果集中第一行的第一列或空引用(如果结果集为空).忽略其他列或行.使用 ExecuteScalar

C#查询数据库--ExecuteReader方法的使用

在做数据库的查询过程中,使用方法ExecuteReader,其返回结果为MySqlDataReader,由于参考的信息有误,走了好长时间的弯路,记录下来; stri

分享到:

栏目导航

推荐阅读

热门阅读