日期:2014-05-19  浏览次数:20431 次

在.NET 中如何动态连接不同数据库
在.NET   中如何动态连接不同数据库

------解决方案--------------------
用反射
可以看petshop
------解决方案--------------------
学习一下“类工厂”的设计模式
参考程序,微软的petshop4
------解决方案--------------------
很简单嘛,应用工厂模式.把数据库联接作接口.再用点反射
给一小段代码参考
public DbDriver()
{
// 获取程序集名称
assemblyName = ConfigurationManager.AppSettings[ "AssemblyName "];
// 获取默认构造器名称
constructor = ConfigurationManager.AppSettings[ "Constructor "];
}
public IDataTask DriveLWordTask()
{
// 建立 IDataTask 对象实例
return (IDataTask)Assembly.Load(assemblyName).CreateInstance(constructor, false);
}
assemblyName是某种具体数据库连接方式的程序集名.改变配置中的程序集名即得到不同的连接方式,不明白就先看下工厂模式
------解决方案--------------------
LZ表达清楚点,不同的数据库是指类型不同,还是数据库名字不同,是什么样的数据库

------解决方案--------------------
我给你一个参考代码,我是影视网站看不同服务器在线情况的
WEB数据库有个ServerList表,存放不同服务器的信息包含数据库用户名和密码
SqlConnection conn = DBconn.openDb();
conn.Open();
SqlDataReader mysdr;
SqlCommand mycmd = new SqlCommand( "select * from ServerList where ServerID= " + this.DdlServer.SelectedValue, conn);
mysdr = mycmd.ExecuteReader();
mysdr.Read();
string ServerIP = mysdr[ "ServerIP "].ToString();
string SQluser = mysdr[ "Sqluser "].ToString();
string SQlpass = mysdr[ "Sqlpass "].ToString();
SqlConnection scon = new SqlConnection( "server= " + ServerIP + ";database=WebMedia;uid= " + SQluser + ";pwd= " + SQlpass + "; ");
SqlCommand scmd = new SqlCommand( "Select a.online_id,b.UserName,C.ProgName,A.PeerIP,a.starttime from Online as a,Customer as b,ProgInfo c where a.Prog_Id=c.Prog_id and a.Customer_ID=b.customer_id and b.username like '% " + this.txtusername.Text + "% ' ", scon);
SqlDataAdapter mysda = new SqlDataAdapter();
mysda.SelectCommand = scmd;
DataSet ds = new DataSet();
mysda.Fill(ds, "UserOnline ");
scon.Close();
DataView mydv = new DataView(ds.Tables[ "UserOnline "]);
this.GridView1.DataSource = mydv;
this.GridView1.DataKeyNames = new string[] { "Online_Id " };
this.GridView1.DataBind();
this.lblOnlineCount.Text =Convert.ToString(mydv.Count);
------解决方案--------------------
你要知道用户选择的数据所在的服务器.

最好给那条数据加一个标记,是哪个数据库.