新足迹

 找回密码
 注册

精华好帖回顾

· E&E -- 果-肉恋曲 (二) -- 杏子青瓜炒猪肉丁 (2010-1-30) 闲夏采薇 · 当 iPhone 爱上 Lomo ......(第7页更新专题24-光影下的沧桑)........ (2011-4-21) Jinoramic
· 航航小厨房(52) 【~~~~~~四川叶儿耙~~~~~~】 (2011-7-30) 航迹云 · 抠哥牌 极品XO酱(无私奉献) (2008-11-25) komen
Advertisement
Advertisement
查看: 1772|回复: 24

C#:不同database connection问题 [复制链接]

发表于 2011-7-12 12:53 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
目前我们有2个database: SQL Server and Firebird. 想用SqlConnection 来做 SQL Server的连接,用OdbcConnection 来做 Firebird的连接。但是两套班子很麻烦。请教一下有没有好的方法?
持不同股见者...
Advertisement
Advertisement

发表于 2011-7-12 12:56 |显示全部楼层
此文章由 北风 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 北风 所有!转贴必须注明作者、出处和本声明,并保持内容完整
具体说说麻烦在哪里?

发表于 2011-7-12 13:07 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 北风 于 2011-7-12 11:56 发表
具体说说麻烦在哪里?


从connection, transaction, command, 一直到datareader 都必须是俩套班子。
持不同股见者...

发表于 2011-7-12 13:09 |显示全部楼层
此文章由 bullying520 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 bullying520 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不知道设计模式有没有用
头像被屏蔽

禁止发言

发表于 2011-7-12 13:09 |显示全部楼层

as a general rule, everyting convinent is expensive in programming

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-12 13:12 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2011-7-12 11:53 发表
目前我们有2个database: SQL Server and Firebird. 想用SqlConnection 来做 SQL Server的连接,用OdbcConnection 来做 Firebird的连接。但是两套班子很麻烦。请教一下有没有好的方法?

没搞太清楚,不过2套数据库还是用entity framework来做object relational mapping是目前比较流行的做法。
Advertisement
Advertisement

发表于 2011-7-12 13:23 |显示全部楼层

回复 交易人生 6# 帖子

此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
+1, Firebird有EF的client, 直接用EF便可。

发表于 2011-7-12 13:35 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我现在有Entity Framework, 是dOOdads, 暂时还没有用,因为还需要学习一下。

如何看待OdbcConnection? 假如只用这一套班子来handle SQL Server, Firebird,速度是否会很慢?
持不同股见者...

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-12 13:38 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2011-7-12 12:07 发表


从connection, transaction, command, 一直到datareader 都必须是俩套班子。

用ef提供数据抽象-o.r.mapping,用TransactionScope在调用ef context的时候做transaction,最好enable ms dtc。

评分

参与人数 1积分 +2 收起 理由
hornsay + 2 感谢分享

查看全部评分

发表于 2011-7-12 13:40 |显示全部楼层

回复 hornsay 8# 帖子

此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
一般Entity Framework是指微软的那个产品, 和dOOdads概念上差不多。

Odbc速度肯定比ORM快,

评分

参与人数 1积分 +2 收起 理由
hornsay + 2 感谢分享

查看全部评分

发表于 2011-7-12 13:42 |显示全部楼层
此文章由 北风 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 北风 所有!转贴必须注明作者、出处和本声明,并保持内容完整
先看一下firebird有没有ef的provider吧
Advertisement
Advertisement

发表于 2011-7-12 13:43 |显示全部楼层
此文章由 北风 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 北风 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有的

原帖由 北风 于 12/7/2011 12:42 发表
先看一下firebird有没有ef的provider吧
If you let people believe that you are weak, sooner or later you’re going to have to kill them.

发表于 2011-7-12 13:44 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
使用DbProviderFactory
connection, transaction, command, datareader什么的都使用接口
IDbConnection, IDbTransaction 等。
public IDbConnection GetConnection()
{
// Get the provider from the config file
DbProvider provider = (DbProvider)Enum.Parse(
typeof(DbProvider),
(string)ConfigurationManager.AppSettings["provider"]);
IDbConnection connection = null;
switch (provider)
{
case DbProvider.SqlClient:
connection = new System.Data.SqlClient.SqlConnection();
break;
case DbProvider.OleDb:
connection = new System.Data.OleDb.OleDbConnection();
break;
case DbProvider.Odbc:
connection = new System.Data.Odbc.OdbcConnection();
break;
case DbProvider.Oracle:
connection = new System.Data.OracleClient.OracleConnection();
break;
}
return connection;
}
public enum DbProvider
{ SqlClient, OleDb, Odbc, Oracle };
XML Application Configuration File
<configuration>
<appSettings>
<add key="provider" value="SqlClient" />
</appSettings>
</configuration>

private DataTable GetData(string commandText, CommandType commandType)
{
//get SqlDbCommand
var command = factory.CreateCommand();
command.Connection = GetProviderConnection();
if (command.Connection == null) return null;
command.CommandText = commandText;
command.CommandType = commandType;
command.Connection.Open();
var dataTable = new DataTable();
//Get SqlDataReader and populate data table
dataTable.Load(command.ExecuteReader());
command.Connection.Close();
return dataTable;
}

第一次感觉考认证的用处:)

评分

参与人数 1积分 +3 收起 理由
hornsay + 3 感谢分享

查看全部评分

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-12 14:06 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 flyspirit 于 2011-7-12 12:40 发表
一般Entity Framework是指微软的那个产品, 和dOOdads概念上差不多。

Odbc速度肯定比ORM快,


ef是ado.net上的一个wrapper ,odbc是可以比ado.net快,但ef 好维护、易开发,速度也不差,如果人们还认可ado.net的速度的话。

如果用odbc直接开发,连个数据model都没有,是快,但很可能有很多hard coded的东西在里面,无论维护和开发的费用都很高。

评分

参与人数 1积分 +2 收起 理由
hornsay + 2 感谢分享

查看全部评分

发表于 2011-7-12 16:43 |显示全部楼层

回复 findcaiyzh 13# 帖子

此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
太给力了, 非常有用, 谢谢.

发表于 2011-7-12 16:46 |显示全部楼层

回复 交易人生 14# 帖子

此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
确实是想用EF, 只是现在在做一些小的程序,感觉有点杀鸡用牛刀,另外时间也有点紧,所以想速战速决,未来应该好好利用EF.
Advertisement
Advertisement

发表于 2011-7-12 23:48 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
EF应该也适合小的程序,开发起来很快,不过支持多种数据库,就不知道了。

google了下EF应该就是provide independent的。
不过要修改SSDL

参考

http://mosesofegypt.net/post/Mul ... tity-Framework.aspx

发表于 2011-7-13 00:17 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 findcaiyzh 于 2011-7-12 22:48 发表
EF应该也适合小的程序,开发起来很快,不过支持多种数据库,就不知道了。

google了下EF应该就是provide independent的。
不过要修改SSDL

参考

http://mosesofegypt.net/post/Multiple-database-support-with-Entity-Framework.aspx


我们现在还只有VS2005, 估计还用不了。我看过dOOdads 的source code, 他们好像也是用sp 或sql 通过dataset 来generate tables 然后mapping 到objects 中,估计速度也会有些影响,不过code容易管理,也非常整齐。另外dOOdads也有support firebird 的模块。

[ 本帖最后由 hornsay 于 2011-7-12 23:20 编辑 ]
持不同股见者...

2012年度奖章获得者 2011年度奖章获得者

发表于 2011-7-13 11:32 |显示全部楼层
此文章由 交易人生 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 交易人生 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 hornsay 于 2011-7-12 23:17 发表


我们现在还只有VS2005, 估计还用不了。我看过dOOdads 的source code, 他们好像也是用sp 或sql 通过dataset 来generate tables 然后mapping 到objects 中,估计速度也会有些影响,不过code容易管理,也非常整齐。另外dOOdads也有support firebird 的模块。

现在已经不是拼单机速度的年代了。

发表于 2011-7-13 12:45 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
很同楼主这样还在用VS 2005的。 你们老板看来从来灭有考虑过员工的职业发展,

时间紧的项目, 用ORM最合适不过, EF这种orm工具出来就是为了提高productivity的。

VS 2010 express应该也可以用EF4, 不如试试看。

发表于 2011-7-13 12:47 |显示全部楼层
此文章由 大飞熊 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 大飞熊 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 flyspirit 于 2011-7-13 11:45 发表
很同楼主这样还在用VS 2005的。 你们老板看来从来灭有考虑过员工的职业发展,

时间紧的项目, 用ORM最合适不过, EF这种orm工具出来就是为了提高productivity的。

VS 2010 express应该也可以用EF4, 不如试试看。


一般小公司都升级的比较快,大公司比较慢。据我所知今年2月份CBA才把有的Database从2000升级到2008.
走别人的路,让别人走投无路
Advertisement
Advertisement

发表于 2011-7-13 13:11 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 大飞熊 于 2011-7-13 11:47 发表


一般小公司都升级的比较快,大公司比较慢。据我所知今年2月份CBA才把有的Database从2000升级到2008.


主要是和行业相关, 银行系统升级都是很慢的。

发表于 2012-2-8 14:29 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
update一下。

我们前阵子用Odbc来连接Firebird database, 结果在客户那里老是有这样那样的connection问题。我们现在改用Firebird .NET provider, 一下解决了这些问题。

还是想问问大家,有没有人用findcaiyzh大大的方法?这个方法网上有人专门做一套object来handle multiple databases.http://www.dotnetjohn.com/articles.aspx?articleid=244

我觉得这个方法不错,不用特地为不同的database建立不同的connection, command, datareader, transaction, etc. 但这个方法是不是有不足之处?
持不同股见者...

发表于 2012-2-8 16:08 |显示全部楼层
此文章由 mortdale 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 mortdale 所有!转贴必须注明作者、出处和本声明,并保持内容完整
你有sql server的权限吗? 有的话用linked server + alias也很容易. 这样做的好处是只要一个sql connection而且数据库也只有一个。

发表于 2012-2-8 22:58 |显示全部楼层
此文章由 hornsay 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 hornsay 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 mortdale 于 2012-2-8 16:08 发表
你有sql server的权限吗? 有的话用linked server + alias也很容易. 这样做的好处是只要一个sql connection而且数据库也只有一个。


我们的客户主要用两种database, 一个是SQL Server, 一个是Interbase/Firebird. 早期因为SQL Server是要收费的,所以当时许多客户都是用Interbase/Firebird, 如果要用linked server的话,可能需要客户那里安装SQL Server, 这个工程可能大了点。
持不同股见者...

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部