收录日期:2020/12/03 00:34:27 时间:2016/07/06 09:02:50 标签:.NET Framework
最近帮同学写个小东西,基本就是访问数据库再显示出来。

背景:
有个情况是那边买什么数据库用还不确定,可能是SqlServer也可能MySql。
由于就是个小程序,涉及的sql也很简单,准备直接写sql读数据库。

现在想法是用DbProviderFactory的两个子类SqlClientFactory和MySqlClientFactory来建DbConnetion、DbCommand、DbDataAdapter等,换数据库的话换个Factory就行了,比如:
DbConnection conn = MySqlClientFactory.Instance.CreateConnection();

但是。。。

问题:
如果sql语句里面有参数(SqlServer和MySql语句里面的参数都是@开头,所以简单的sql语句也通用),由于DbProviderFactory.CreateParameter()返回的是DbParameter,他的DbType属性是个enum。。举个例子:
DbParameter p = SqlClientFactory.Instance.CreateParameter();


如果想指定p.DbType会发现它只能是System.Data.DbType,想过显式转换,这样:
p.DbType = (System.Data.DbType)System.Data.SqlDbType.XXX;


但用Refactor看过DbType和SqlDbType代码,里面相似的数据类型对应的int值根本就不一样,比如DbType.DateTime = 6,SqlDbType.DateTime = 4。这样强制转换过去肯定要出问题。

我知道DbParameter可以“猜”数据的类型,但有些时候混淆、特殊的类型会猜不对,而且指定数据类型还有其他好处,所以。。
谁知道对不同的数据库怎样很好的指定DbParameter的DbType,让换数据库的代码修改尽量少。。THX!

BTW:
如果DbType是个class而不是enum就好了,就像Java没enum以前就是用类加static变量来代enum的。
这样其他XXXDbType就可以继承了。。
试下用enum的名字?
asp.net夜话之七:ADO.NET介绍 
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
http://blog.csdn.net/zhoufoxcn/archive/2008/10/13/3066799.aspx
在这里不好抽象的,一般都是在DAL做不同的DAL类的。上面Entity和BLL公用一个,有DAL工厂来决定生成SQL Server还是MySQL的工厂。
嘿嘿,楼主不用转化啊,你可以不要用在初始化SqlParameter的时候给它付type,直接先SqlParameter param = new SqlParameter (); 然后param.DbType == DbType.Int,这个地方也可以用工厂的,我做过,希望能帮到你
SqlParameter的DbType属性是override了DbDataParameter的DbType的!!!!
3楼的同意

有没有公司需要C程序员,而且是义工。 excel 获取选定范围 (抢分了)用C#编程遍历页面中所有的TextBox,并将Text设置为\"我来抢分\" 高分!!!!idhttp怎么获得 http 302 里的 set-cookie [100分大贴] loginView的模版跳转问题` 很急啊` 简单的 ADO 问题 ASP.NET 2.0 页面计时 include包含 我已经改了N个端口号了,怎么还显示被占用啊。是不是我tomcat配置有问题啊 Swr_4442读写操作?????? 关于链表问题~~~老出错 关于QQ刷分 关于QQ刷分 sql建表疑问 求文件汇编高手帮助看帖急救~花钱求教~ 麻烦大家帮我改改简历啊!准备去北京找工作拉!谢谢! 请教一个关于邮件附件提取的问题? 求助:nokia6670想读其名片夹的api 新手:blog中的日历怎么实现? 请推荐些好的java web应用开发的视频教程 DropDownList的问题 如何将一结构数据复制到一char或BYTE内存块中? 如何将WINDOWSXP的升级文件下载到本地,自己进行升级? button1中生成的datatable在button2中怎么访问呀 如何用代码来选定TreeView中指定的节点。。 请问存储过程的一个参数的返回值是数组,怎么写? DataGrid的初始化问题 这种写法是unix下的吧 $cat 是啥意思 #!呢 安装错误:Error 1305.Error reading from file Z:\\INSTALL\\BorlandC++Builder6.msi Verify that the file exists and that you can acce 页面再次加载 DataTable为空问题?????