DataReader 类型转换问题

lsd123 2010-05-25 09:29:33
//SqlServer
IDataReader reader=value;
int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
if (!reader.IsDBNull(index))
return (int)reader.GetInt32(index);//这里转换为什么会报错?指定的类型转换无效

//如何才能做到数据库无关?用Convert.Int32(reader["columnName"])性能有影响吗?
...全文
232 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2010-05-25
  • 打赏
  • 举报
回复
因为reader["columnName"]已经读出数据,并且是decimal类型了(或double)
decimal能直接通过(int)或convert.Int32转换成int类型
lsd123 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gxingmin 的回复:]

晕,应该是return (int)reader.GetDecimal(index);
应为你的字段是numeric(38,4)对应的是Decimal类型的,所以Reader.GetInt32(index)这样就会报错
[/Quote]

那为什么Convert.Int32(reader["columnName"])这样就可以了?
gxingmin 2010-05-25
  • 打赏
  • 举报
回复
晕,应该是return (int)reader.GetDecimal(index);
应为你的字段是numeric(38,4)对应的是Decimal类型的,所以Reader.GetInt32(index)这样就会报错
lsd123 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 luols 的回复:]

C# code

return reader.GetDouble(index);
//返回double型
[/Quote]

如果想知道这个就不会问了
lsd123 2010-05-25
  • 打赏
  • 举报
回复
各位我想知道原因
lsd123 2010-05-25
  • 打赏
  • 举报
回复


IDataReader reader=value;
int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
if (!reader.IsDBNull(index))
return (int)(decimal)reader.GetInt32(index);//这里报错啊哥们
(int)(decimal)reader.GetInt32(index)还是报错的,我知道解决方法,我不知道为什么会跟数据库类型绑定?
阿双2009 2010-05-25
  • 打赏
  • 举报
回复

return reader.GetDouble(index);
//返回double型
lsd123 2010-05-25
  • 打赏
  • 举报
回复
我想知道为什么会跟数据库类型绑定?
如何才能做到数据库无关?
gsq_0912 2010-05-25
  • 打赏
  • 举报
回复
//SqlServer
IDataReader reader=value;
int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
if (!reader.IsDBNull(index))
return Convert.toInt32(reader.GetInt32(index));//这里转换为什么会报错?指定的类型转换无效
这个应该不会影响效能的
gxingmin 2010-05-25
  • 打赏
  • 举报
回复
先转成decimal,再转int
gxingmin 2010-05-25
  • 打赏
  • 举报
回复
IDataReader reader=value;
int index = reader.GetOrdinal("columnName");//此列数据库类型为numeric(38,4) 值为1
if (!reader.IsDBNull(index))
return (int)(decimal)reader.GetInt32(index);//
A_persons_journey 2010-05-25
  • 打赏
  • 举报
回复
学习下 虽然看不懂
chensun891229 2010-05-25
  • 打赏
  • 举报
回复
路过,学习了~
阿双2009 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lsd123 的回复:]
对啊,我数据库存储的值是1,怎么还不行?
[/Quote]

写错了,应该是字段类型必须是整型,你这里虽然存的是1,但如果字段类型不是整型,还是会引发异常!
lsd123 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luols 的回复:]

reader["columnName"]与GetValue()方法一样,返回的都是object类型的对象,它可能是各种数据类型,如果在数据库中为空,则返回DBNull
GetInt32()返回的是整型,这就要求该字段的值必须是整形,如果是其他类型或者空,则会引发异常
[/Quote]

对啊,我数据库存储的值是1,怎么还不行?
阿双2009 2010-05-25
  • 打赏
  • 举报
回复
reader["columnName"]与GetValue()方法一样,返回的都是object类型的对象,它可能是各种数据类型,如果在数据库中为空,则返回DBNull
GetInt32()返回的是整型,这就要求该字段的值必须是整形,如果是其他类型或者空,则会引发异常
第1天 注释的应用 第2天 02_+号的应用 03变量的使用 C中的转义符 05交换量变量 07接收用户的信息 04个练习 06占位符 第3天 04逻辑运算符 05if结构 06习题 03bool类型 02Convert字符转换练习 01Convert字符装换 用户登录 第3天 Net第三天取余 第4天 01异常捕获 02练习 02异常捕获 03switch-case 04while循环 06练习 07while练习与do--while 08for 循环 12continue 09乘法口诀练习 10类型转换和方法转换 11tryparse练习 13三元表达式 第5天 00随机数 05数组 06数组的运用 06数组的运用:冒泡程序 07方法 01枚举 04结构 02枚举和int以及sting类型之间的转换 03枚举练习 第6天 01方法调用 判断是否为整数 yes或no 02方法练习求数组的和 03方法 out参数求数组的和 04 out参数练习 05 out练习 06 ref参数 07 ref 参数练习 08 params 可变参数 09方法的重载 10方法的递归 11方法练习 第7天 01面向对象 02 属性 03练习 第7天 01复习 02方法的调用问题 03判断闰年 04方法概念 05方法练习 06方法的3个练习 07out参数 08使用out参数做登陆 09自己动手写tryparse 10ref参数 11、ref练习 12params可变参数 13、方法的重载 14、方法的递归 15方法练习 第8天 01面向对象复习 02命名空间 03字符串的高级用法 04字符串练习 05继承 Driver Person Program Student Teacher 06继承的练习 第9天 00里氏转换 01里氏转换 M1 M2 M3 M4 person Program 02protected ArrayList集合 ArrayList集合练习 第10天 03_List泛型集合 04_Dictionary 05泛型集合练习 06文件流 FileStream 07StreamReader和StreamWriter 02 file类 01 path类。File.ReadAllBytes 第11天 02 抽象类 Animal Cat Dog Program 02-抽象类 Animal Program 03抽象类练习 04复习 06接口 05设计模式 06序列化 07partial部分类 08sealed密封类 01面向对象-多态 第12天 01接口 02接口的特点 03接口练习 03解决接口与方法重名问题 04收银系统 Banana BuDaZhe CangKu ....... 第13天 01第12天_接口 第14天 01MDI窗体设计 02PictureBox实现图片切换 03PictureBox和timer练习 第14天 MD5加密 03WindowsForms练习 05timer跑马灯练习 06timer闹钟练习不是完整的 08单选和多选练习 01MD5加密 04textBox控件显示输入的文本 02windows控件弹出窗体练习 07简单记事本应用 第15天 01浏览器控件 02下拉框日期选择器 02日期选择器控件 03双击播放音乐 04对话框练习 第16天 01播放音乐 01打开文件双击播放音乐 02线程 03线程执行带参数的方法-摇奖机 04创建服务端Socket(未实现) 04客户端的Socket(未实现) 05创建服务端的Socket 05创建客户端的Socket ConsoleApp1 第17天 02Command操作数据 03DataReader读取数据 04DataSet数据集 05DataAdapter数据适配 01第17天Connection数据库打开关闭 第18天 01DataGridView-表格数据控件 02DataGridView隐藏行列 03 DataGridView直接修改数据 04DataGridView当前行显示不同颜色 05分页 第19天 01进程 02进程 03FileStream文件流 03复制文件 03正则表达式 04正则表达式下载页面图片(未实现) 第20天 01创建XML文档 02对xml文档增删改查 03.2判断是否登录成功原版 03判断是否登录成功 04Xml增删改查 05Xml增删改查(更改的) 第21天 01为什么会有委托 02泛型委托 03多播委托 04使用委托进行窗体传值 05事件 06事件 07程序集的引用 07Common 08反射的常用函数 09用反射制作计算器 第22天 01 SqlConnection 数据库 02ConnectionStringBvilderDemo字符串创建器 03ConfigDemo 配置文件配置连接字符串 05UserDemon 04UserDemo 06DataImporting数据导入 07DataReader读取数据 第23天 第23天UserDemon用户登录
这是第一部分,需要两部分一起才能解压 目录: 第1篇 编程经验与感悟篇 第1章 编程感悟6则 感悟01 程序员的成长之路 感悟02 程序员应具备的素质 感悟03 程序员的必备技能 感悟04 程序员的认识误区 感悟05 程序员的生涯规划 感悟06 未来IT发展趋势 第2章 编程经验谈6则 经验01 培养编程的兴趣 经验02 编程学习经验谈 经验03 代码规范经验谈 经验04 数据库设计经验谈 经验05 项目实战经验谈 第2篇 陷阱或谬误篇 第3章 不可忽视的30个技术陷阱 陷阱01 版本不一致产生的陷阱 陷阱02 结构初始化产生的陷阱 陷阱03 传递派生类产生的陷阱 陷阱04 用DataReader读取数据时产生的陷阱 陷阱05 类型转换时产生的陷阱 陷阱06 以DataReader作为返回类型的陷阱 陷阱07 GridView绑定DataReader产生的陷阱 陷阱08 SqlDateTime溢出陷阱 陷阱09 写网站中XML文件产生的陷阱 陷阱10 访问下拉列表控件的SelectedValue属性产生的陷阱 陷阱11 动态加载用户控件的陷阱 陷阱12 JavaScript设置服务器控件值 陷阱13 放置隐藏字段的陷阱 陷阱14 动态加载设置输出缓存的用户控件 陷阱15 为删除按钮添加删除确认对话框 陷阱16 页面在客户端转向的陷阱 陷阱17 Web Service方法重载产生的陷阱 陷阱18 编写JavaScript代码时的空格陷阱 陷阱19 使用可空符号??运算 陷阱20 获取错误信息并到指定页面 陷阱21 使用LINQ的First方法 陷阱22 文件格式与文件读取的陷阱 陷阱23 读写二进制文件的陷阱 陷阱24 母版页中使用img标签 陷阱25 页面缓存产生的陷阱 陷阱26 使用查询字符串在页面间传递参数 陷阱27 通用数据类型运算产生的陷阱 陷阱28 在模态窗口中下载文件 陷阱29 构造方法中调用虚方法的陷阱 陷阱30 使用值类型进行线程同步 第4章 开发人员意识中的20个常见谬误 谬误01 所有的异常都要使用try…catch语句捕获 谬误02 Web控件的Enabled功能等价于HTML控件的 disabled属性 谬误03 将Session设置为空就是删除该会话状态 谬误04 RegisterStartupScript方法不能向页面输出文本 谬误05 数据绑定表达式会自动计算它的值 谬误06 事件和委托的差别很大 谬误07 Visual C# 8具有的特征Visual Basic 8都具有 谬误08 .NET中的应用程序域和操作系统中的进程完全相同 谬误09 C#中没有全局变量 谬误10 .NET和SQL Server中“空值”是一回事 谬误11 C#的结构和C++的完全一样 谬误12 方法中只有引用类型的参数才能实现引用传递 谬误13 字符串是值类型 谬误14 数据绑定表达式中Eval功能等价于Bind 谬误15 .Net中的数组类型和C++的数组没有区别 谬误16 泛型不被指定的情况下是不确定的类型 谬误17 Object类型比较方法上的一些误解 谬误18 .NET中的线程等价于Win32线程 谬误19 TextBox控件依靠ViewState保存状态数据 谬误20 必须在页面添加元素才能使用CSS文件中的样式 第3篇 技术细节篇 第5章 必知必会的40个C#语言方面的技术细节 细节01 给C#代码加注释的意义 细节02 装箱和拆箱 细节03 理解值类型和引用类型 细节04 隐式转换和显式转换 细节05 前缀方式增1和减1运算符 细节06 理解移位运算符 细节07 理解运算的次序 细节08 理解参数的类型 细节09 重载方法 细节10 虚方法与重写方法 细节11 结构和类的区别 细节12 什么是封装 细节13 什么是继承 细节14 什么是多态性 细节15 作用域的概念 细节16 使用索引器 细节17 base和this关键字 细节18 理解静态修饰符 细节19 .Net的object类 细节20 细说可空类型 细节21 分部类 细节22 匿名方法 细节23 .Net框架提供的属性(Attribute) 细节24 自定义属性类(Attribute) 细节25 泛型 细节26 包含/委托 细节27 实现迭代器 细节28 压缩和解压缩流的方法 细节29 C#中的深复制和浅复制 细节30 全角字符转换为半角 细节31 分析路径字符串函数总结 细节32 重载一元、二元运算符 细节33 对象也能排序 细节34 实现IDisposable接口清除对象 细节35 将字符串转为字符数组 细节36 将字符数组写入到字符串 细节37 使用var创建隐型局部变量 细节38 Lambda表达式 细节39 生成缩略图的方法 细节40 使用缓冲流 …… 第6章 必知必会的28个ADO.NET、XML及LINQ方面的技术细节 第7章 必知必会的22个Web方面的技术细节 第4篇 开发技巧篇 第8章 必知必会的30个语言方面的经验技巧 第9章 必知必会的15个ADO及XML方面的经验技巧 第10章 必知必会的40个LINQ方面的经验技巧 第11章 必知必会的65个Web方面的经验技巧 第5篇 算法和效率篇 第12章 常用的20个算法及应用 第6篇 解决方案篇 第13章 项目中经常用到的20个解决方案

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧