2024年3月16日发(作者:)
C#数据四种执行ExecuteReader、ExecuteNonQuery、ExecuteScalar、DataSet
1、使用ExecuteReader()操作数据库
2、使用ExecuteNonQuery()操作数据库
3、使用ExecuteScalar()操作数据库
4、使用DataSet数据集插入记录、更新数据。
一、使用ExecuteReader()操作数据库,执行查询操作的利器
ExecuteReader相比与DataSet而言,DataReader具有较快的访问能力,并且
能够使用较少的服务器资源。DataReader对 象提供了“游标”形式的读取方法,
当从结果中读取了一行,则“游标”会继续读取到下一行。通过Read方法可以
判断数据是否还有下一行,如果存在数据,则 继续运行并返回true,否则返回
false。
DataReader可以提高执行效率,基于序号的查询可以使用DataReader.当使用
ExecuteReader()操作数据库时,会遇到知道某 列的名称而不知道某列的号的情
况,这种情况可以通过使用DataReader对象的GetOrdinal()方法获取相应的列号。
此方法接收一个列名并返 回此列名所在的列号。
示例代码:
string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字
串
SqlConnection con = new SqlConnection(str); //创建连接对象
(); //打开连接
string strsql = "select * from mynews where id=1 order by id desc"; //创建执行
SQL语句
SqlCommand cmd = new SqlCommand(strsql, con); //创建Command对象
SqlDataReader rd = eReader(); //创建DataReader对象
int id = inal("title"); // 使用GetOrdinal方法获取title列的列号
while (()) //遍历DataReader对象
{
= "新闻id是" + rd["id"]; //输出对象的值
}
使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数
据库查询操作,使用 ExecuteReader()查询数据库能够提升查询效率,而如果需
要进行数据库事务处理的话,ExecuteReader()方法并不是理想的选择。
二、使用ExecuteNonQuery(),ExecuteScalar()操作数据库,执行增删改操
作的利器
ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入、
删除、更新等操作时,首选 ExecuteNonQuery(),ExecuteNonQuery()执行成功是
返回的是一受影响的行数,对于“CREATE TABLE”和“DROP TABLE”语句,
返回值为0,而对于所有其他类型的语句,返回值为-1。ExecuteNonQuery()操作
数据时,可以不使用DataSet直接 更改数据库中的数据。
ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语
句后的返回值与 ExecuteNonQuery()并不相同,ExecuteScalar()方法的返回值的数
据类型是Object类型。如果执行的SQL语句是一个查 询语句(SELECT),则
返回结果是查询后的第一行的第一列,如果执行的SQL语句不是一个查询语句,
则会返回一个未实例化的对象,必须通过类型转换来 显示。
通常情况下ExecuteNonQuery()操作后返回的是一个值,而ExecuteScalar()
操作后则会返回一个对 象,ExecuteScalar()经常使用于当需要返回单一值时的情
况。例如当插入一条数据信息时,常常需要马上知道刚才插入的值,则可以使用
ExecuteScalar()方法。
示例代码:
string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字
串
SqlConnection con = new SqlConnection(str); //创建连接对象
(); //打开连接
string strsql = "insert into mynews values ('刚刚插入的id是多少?')
SELECT @@IDENTITY as 'bh'"; //插入语句
SqlCommand cmd = new SqlCommand(strsql, con); //执行语句
= "刚刚插入的行的id是" + eScalar(); //返回赋值
上述代码使用了SELECT @@IDENTITY语法获取刚刚执行更新后的id值,
然后通过使用ExecuteScalar()方法来获取刚刚更新后第一行第一列的值。
四、使用DataSet数据集插入记录、更新数据。
使用INSERT语句能够完成数据插入,使用DataSet对象也可以完成数据插
入。为了将数据库的数据填充到DataSet中,则必须先使用 DataAdapter对象的
方法实现填充,当数据填充完成后,开发人员可以将记录添加到DataSet对象中,
然后使用Update方法将记录插入数据 库中。使用DataSet更新记录的步骤如下
所示:
① 创建一个Connection对象。
② 创建一个DataAdapter对象。
③ 初始化适配器。
④ 使用数据适配器的Fill方法执行SELECT命令,并填充DataSet。
⑤ 使用DataTable对象提供的NewRow方法创建新行。
⑥ 将数据行的字段设置为插入的值。
⑦ 使用DataRowAdd类的Add方法将数据行添加到数据表中。
⑧ 把DataAdapter类的InsertCommand属性设置成需要插入记录的
INSERT语句。
⑨ 使用数据适配器提供的Update方法将新记录插入数据库。
⑩ 使用DataSet类提供的AcceptChanges方法将数据库与内存中的数据保
持一致。
Insert 示例代码:
string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字
串
SqlConnection con = new SqlConnection(str); //创建连接对象
(); //打开连接
string strsql = "select * from mynews"; // 编写SQL语句
SqlDataAdapter da = new SqlDataAdapter(strsql, con); //创建适配器
SqlCommandBuilder build = new SqlCommandBuilder(da); //构造SQL语句


发布评论