




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于 ExecuteScalar 的用法(转)今晚弄了好久 , 老是跟我报错 , 什么 32 不能转换成 string 类型 .代码查了好半天都找不到答案 !终于在我想要到网上去查找问题的时候 ,不知道是我天生的直觉好 ,还是东西学多了 ,想到的东西也多了 .我想到了可能是在 dataaccesslayer 层里的类出错了 (虽然之前一直都不报错 ),因为 ExecuteScalar() 我以前根本没有用过 , 只是今年过年想 用三层架构来建立一个网站 , 所以用到了 ExecuteScalar(), 本以为 ,它应该就是返回查询结果的第一个值,并且它只会以字符串形式返回
2、,这个想法是正常的 .因为 .net 没有可能把东西 作到如此细微吧 ?! 但是 ,就是你认为不会的时候 ,.net 还是 摆了你一道 .ExecuteScalar() 返回的类型不是一定的 . 有可能 是字符串 , 也可能是数值类型 . using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebCont
3、rols.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient; / <summary>/ dataaccesslayer 的摘要说明/ </summary>public class dataaccesslayerprotected SqlConnection conn;protected SqlCommand cmd;protected SqlDataAdapter adp;protected DataSet ds;public dataaccesslayer()/ TODO: 在此
4、处添加构造函数逻辑/public void open()conn = newSqlConnection(server=(local);database=commonwebsite;uid=sa;pwd=123456);conn.Open();public void close()conn.Close();public int sqlexecute(string strsql)int count;open();cmd = new SqlCommand(strsql,conn);count=cmd.ExecuteNonQuery();close();return count;public stri
5、ng sqlselect(string strsql)string result;open();cmd = new SqlCommand(strsql,conn);object scalar = cmd.ExecuteScalar();if (scalar != null)result = (string)scalar).Trim();elseresult = 错误 ;/result = cmd.ExecuteScalar().ToString().Trim();close();return result;public object getdatasource(string strsql)ob
6、ject result;open();adp = new SqlDataAdapter(strsql,conn);ds = new DataSet();adp.Fill(ds, list);result = ds;close();return result; 这是我原来写的 dataaccesslayer. 竟然是在这里 :objectscalar = cmd.ExecuteScalar();改成 object scalar =问题迎刃而解 同时 ,发cmd.ExecuteScalar().ToString();现原来我以前就发现 ExecuteScalar() 返回的是 object 类型
7、.也可以改成 public string sqlselect(string strsql)string result;open();cmd = new SqlCommand(strsql,conn);string scalar = cmd.ExecuteScalar();if (scalar != null)result =scalar.Trim();elseresult = 错误 ;/result = cmd.ExecuteScalar().ToString().Trim();close();return result; 唉 ,还是想到了其它的问题啦 .上面说的 :本以为 ,它应该就是返回查
8、询结果的第一个值 ,并且它只会以字符串形式返回 ,这个想法是正常的 .因为 .net 没有可能把东西作到如此细微吧 ?! .net 确实没有这么细微 .但是 ,它是以 object 类型 返回值 .为验证我的猜想 ,基类 (如 int,float,double,char 等 )被封装在 object 中后 仍能辨别它们是基类 .实验的结果是 ,被封闭成 object 的数据 ,想把这个数据再转换出来 ,一定要使用原来的类型强制转换 ,否则会出错 .试验代码如下 : object o;float i = 11;o = (object)i;float str = (float)o; 上面 代码正确
9、 . 但如果 float 改成int object o;float i = 11;o = (object)i;int str = (int)o; 就会报错 . 不论是你改成 double 还是char 之类的类 . 它都是会报错 于是结论是 ,被封闭成 object的数据 ,如果想要用强制转换类型的方法 ,那只能使用它未被封闭之前的数据类型 . 为什么这里说是强制转换类型呢 ? 因为 ,不要把 ToString(),ToInt(),Convert.ToInt32()等方法 ,也把它看作是强制转换了 .它们是转换类型的方法 ,但不是强制转换方法 .于是,到此时 ,我才明白了 ,我原来的问题是出在
10、分不清强制转换和转换方法了 .如果我把上面那个代码改成 object o;float i = 11;o = (object)i;int str = Convert.ToInt32(o);代码不报错 . 原因 :强制转换 ,是将某种类型强制转成其它类型 ,如果转换不成就会报错 .而使用转换方法 ,它只是对数据进行运算 ,再返回运算结果,所以转换不成功 ,它也不会报错 . 结论 ,应该尽量使用ToString() 这种转换方法 ,而不要使用强制转换了 .强制转换太不安全了ExecuteNonQuery 与 ExecuteScalar的区public int GetRsCount(string ta
11、ble_name)string strSql;int intCount;Open();strSql=select count(*) from +table_name;SqlCommand cmd=new SqlCommand(strSql,cn);语句 1 ) intCount=(int)cmd.ExecuteScalar();/ 断点断点的区语句 2) / intCount=(int)cmd.ExecuteNonQuery();/cn.Close();return intCount;今天测试了一下 ExecuteNonQuery 与 ExecuteScalar别: 在以上语句中分别执行了语句
12、 1 和语句 2,因为是查询语句,所以可以查询到数据库中的所有数据, 本身数据库中有 7 条数据,当我用 ExecuteScalar 语句时, 在该句设了个断点,检测到 intCount 为 7,同样, 当我使用语句 2 是,检测到 intCount 为 0,现在才知道为什么 ExecuteScalar 主要用于查询语句, 而 ExecuteNonQuery 用于更新和删除语句, 但是有一点不懂的就是, ExecuteScalar 语句返回的是影响 数目,但是帮助中确是说“ ExecuteScalar :执行查询,并返 回查询所返回的结果集中第一行的第一列。忽略额外的列或 行。 ”ExecuteNonQuery 主要是在执行更新和删除时才返回影响在你这的数目,而在执行查询时则是返回一个 0 。if ($ != jQuery) $ = jQuery.noConflict(); 里 ,executeScalar(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年喀什b2货运资格证多少道题
- 劳动合同范本手写
- 单位洗车合同范本
- 六险一金 合同范本
- 个人建筑仓库合同范本
- 劳务中介劳务合同范本
- 东城食堂承包合同范本
- 住宿酒店前台合同范本
- 出售二手房贷款合同范本
- 临沂工厂转让合同范本
- 国际贸易地理全套课件
- 家校共育-助孩子成长-家长会课件
- 叉形件工艺及车床夹具设计说明书
- GB/T 5916-2008产蛋后备鸡、产蛋鸡、肉用仔鸡配合饲料
- 《中小学教育惩戒规则》(试用)试题及答案
- GB/T 23723.1-2009起重机安全使用第1部分:总则
- 安全测试工具、蹭网利器wifiphisher新增汉化版
- 中学教育-中学生心理健康量表参考范本
- 外科病人体液失衡-课件
- 电力拖动自动控制系统-运动控制系统(第5版)习题答案
- 赣美版四年级美术下册全册课件汇总
评论
0/150
提交评论