WinFrom日记————ExecuteReader、ExecuteNonQuery、ExecuteScalar使用方法

在写C#的时候,获取数据库数据的时候会用到ExecuteReader、ExecuteNonQuery、ExecuteScalar等对象和方法,刚开始给自己整蒙了,不知道怎么用用哪个,程序第一部分的内容写的差不多了,写几篇博客做一些总结
数据库连接方法:https://blog.csdn.net/weixin_44546342/article/details/106303336
一、ExecuteScalar执行方法

         string Sql_Str = "update T_users set Active=@Active where Email = @Email;SELECT id from T_users where Email=@Email;";SqlParameter[] sq =      {new SqlParameter("@Active",Active),new SqlParameter("@Email",Email)};ReadySql(Sql_Str, sq);      //参数的存储和sql语句存储,这是我自己封装的方法,不必太在意object Result = sql_com.ExecuteScalar();if(Result != null){MessageBox.Show("Update successful!");}else{MessageBox.Show("Something wrong!");}sql_con.Close();return;

ExecuteScalar()执行后,返回的是一个object类的数据,这个类型是所有类型的基类,可以进行任意的转换,强制转换就可以。
ExecuteScalar()执行后返回的数据库第一条的第一列数据,就只返回一个数据,所以他适用于查询总数,查询单个id之类的情况下,查询结果如图;

二、ExecuteNonQuery执行方法

         Sql_Str = "insert into T_Office (User_id,Office) values(@User_id,@Office)";SqlParameter[] sql ={new SqlParameter("@Office",Office),new SqlParameter("@User_id",User_id)};sql_com = new SqlCommand(Sql_Str, sql_con);sql_com.Parameters.AddRange(sql);int Result = sql_com.ExecuteNonQuery();      //执行后返回的是一个整数if (Result>0){MessageBox.Show("Add successful!");}else{MessageBox.Show("Something wrong!");}sql_con.Close();    //数据库连接关闭//sql_con.Dispose();

ExecuteNonQuery()方法执行后返回的是一个整数,即返回受Sql语句所影响的数据条数,这个执行方法可以用于数据插入、修改的时候,用来判断Sql语句是否成功执行
另插一句,我之前写的时候为了判断语句是否成功是在Sql语句后面加上SELECT @@Identity;
像这样insert into T_Office (User_id,Office) values(@User_id,@Office);SELECT @@Identity;
即返回第几条数据受影响吧好像,然后用ExecuteScalar()执行的,这个方法我觉得不太好,还是ExecuteNonQuery()比较好用,就这么提一下,不要太在意
三、ExecuteReader()执行方法

         List<LoginList> result_list = new List<LoginList>();       //泛型集合list<>,我也是一知半解,照着用ReadySql(Sql_Str, sq);  //参数的存储和sql语句存储,这是我自己封装的方法,不必太在意SqlDataReader Return_result = sql_com.ExecuteReader();if (Return_result.HasRows) //使用HasRows方法判断是否有值返回{while (Return_result.Read())  //通过循环一条一条的读数据,{LoginList data = new LoginList();data.User_Id = (int)Return_result["id"];data.User_Name = Return_result["First_name"].ToString() + " " + Return_result["Last_name"].ToString();data.Role = Return_result["Role"].ToString();result_list.Add(data);}}sql_con.Close();

泛型集合list<>

 class LoginList{public int User_Id;public string User_Name;public string Role;}

ExecuteReader()执行方法返回的类型是SqlDateReader,通过流得方式对查询结果进行连接后访问,只读,适合数据量比较小的情况下,只能一条一条的读数据,感觉有点类似指针。
适用于select查询的情况,通过循环一条一条的读取存入list内就行

以下部分摘抄自网络:https://blog.csdn.net/yhj198927/article/details/72844155
SqlDataReader与SqlDataAdapter+DataSet的区别
一,SqlDataReader //基于连接,只读访问 适合数据量较小。(连接模式)
SqlDataAdapter //基于非连接,适于数据量较大时,可以另行修改,最后再把修改结果返回给数据库。要求资源也大一点 (断开模式)

二,SqlDataAdapter 读取数据后将数据集放入DataSet ,DataSet 的数据存在本地客服机内存。

三,SqlDataReader返回的是一个数据读写器,只能一条条的读,操作起来不灵活,一般在只读的时候才用到。
SqlDataAdapter返回的是数据集或者表,可以对其中的数据作任意操作

四,写法上不同:

SqlDatReader执行前须先打开数据库,然后须生成一个command对象。再由command.ExecuteReader()方法赋值。完成后须手动关闭联接。

         SqlCommand cmd = new SqlCommand("select * from stu", conn);conn.Open();SqlDataReader rdr = cmd.ExecuteReader();//。。。。。conn.close();

SqlDataAdapter 执行时,自动打数据库,且不用Command的ExecuteReader方法进行赋值,完成后自动断开联接。

     SqlDataAdapter adptr = new SqlDataAdapter(sql, conn);DataSet ds = new DataSet();adptr.Fill(ds, "stu");

以上便是我总结得一点东西,如果有不对的地方请帮忙指出,相互进步,谢谢。

WinFrom日记————ExecuteReader、ExecuteNonQuery、ExecuteScalar使用方法相关推荐

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

    转载于http://www.cnblogs.com/asdyzh/p/9741641.html ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转 ...

  2. [转]ExecuteNonQuery()、ExecuteReader()、ExecuteScalar()的简单说明

    http://blog.csdn.net/wuyujie1219/archive/2009/07/26/4380956.aspx 在连接SQL Server数据库:首先创建SqlConnection类 ...

  3. ExecuteScalar ExecuteReader ExecuteNonQuery 区别

    ExecuteScalar: 执行查询,并返回查询所返回的结果集中第一行的第一列.忽略其他列或行. ExecuteReader: 将 CommandText 发送到 Connection 并生成一个 ...

  4. android 成长日记 8.Fragment学习之方法回调

    2019独角兽企业重金招聘Python工程师标准>>> 动态加载为何为重叠?什么时候fragment中的控件直接可以在主函数找到(好像都可以直接找到明天测试一个leftfragmen ...

  5. 怎样用python计算π的值_IV.python初探日记:python实现蒙特卡洛方法计算π值

    早上中级微观经济学课上复习泰勒展开和麦克劳林展开,顺带讲到了用蒙特卡洛方法实现计算π值,于是下午着手用python尝试着实现了一下,并用matplotlib输出了一部分数据. 完整的代码在文末,本文适 ...

  6. python学习日记(基础数据类型及其方法02)

    python的变量 python中的变量不需要声明,变量载使用前必须被赋值,变量被赋值以后才会被创建. 在python中变量就是变量,没有数据类型.我们所说的类型是变量所指向内存中的对象的类型. py ...

  7. 小陆的AE学习日记:C#中.distinct()方法无效问题

    新建一个数组或者用原来的数组接收distinct后的值,如 N_count= N_count.Distinct().ToList();//去除重复值 亲测有效,自己不是很明白原理,还望有大佬路过帮忙解 ...

  8. 【QT日记】QT MYSQL 链接方法 QMYSQL driver not loaded解决方法 qt5.13 mysql5.7

    相信很多第一次在QT下链接MYSQL的朋友都会遇到这个问题: 读取不到QMYSQL的驱动,QSqlDatabase支持的驱动有:QSQLITE QODBC QODBC3 QPSQL QPSQL7 [就 ...

  9. command对象和DataReader的学习

    DataReader的学习 DataReader对象是从数据源中读取只读的且只向前的数据流.它的特点是读取速度非常快,但需要手动编写代码来实现数据的处理工作. DataReader对象中数据的获得是通 ...

最新文章

  1. bmaplib vue 调用_Vue-cli3/4中使用AMap、BMap
  2. 蓝桥杯 历届试题 九宫重排
  3. 安装mysql冲突_Linux下安装mysql版本冲突问题解决
  4. python学习(8)
  5. 大话ConcurrentHashMap的put,get过程
  6. Visual Studio 2017 针对移动开发的新特性介绍
  7. 有问有答 | 容器精华问答,如何玩转容器服务?
  8. RocketMQ常见面试题
  9. SpringSecurity-1-AuthenticationFailureHandler接口(登录失败之后的处理逻辑)
  10. 电影屏幕行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. java9学习之模块化
  12. flv转mp4(ffmpeg)
  13. 迅雷9屏蔽所有游览器和网站相应
  14. 如何获取当前地理位置的坐标
  15. angular学习-数据绑定
  16. linux power manager模型
  17. css中字体大小font-size的设置
  18. 软件上线后出现了BUG怎么办?新梦想IT
  19. 《图解经济学》读后感
  20. 20220316_Scanner、匿名对象、Random、ArrayList

热门文章

  1. 大学生实用电子书pdf官方下载软件及使用教程
  2. exchange创建邮箱组_Exchange2013专题系列(八)邮箱,通讯组的创建
  3. Ogre 场景管理器
  4. 电商卖家新方向亚马逊无货源 是否适合每个人做?
  5. 马哈鱼SQLFLow对SQL Server OUTPUT Clause 的数据血缘分析
  6. 服务器加根网线用不用修改路由器,子路由器怎么设置?【图文教程】
  7. 打开计算机不显示百度云管家,电脑百度云管家打不开怎么办
  8. 【100】Down Just me-测试网站服务是否宕机
  9. 文件大小为什么和占用空间不一样?
  10. 一起Talk Android吧(第四百五十九回:SeekBar补充用法二)