2012-03-07 109 views
3

是否可以同时连接到两个SQL数据库?我的意思是从一个数据库中读取记录,并将它们与一些数据(如电子邮件地址)进行比较,并根据是否在数据库中存在该电子邮件地址的决定,我将另一个数据库中的新记录存储起来。ASP.net一次连接两个数据库?

这种双重操作可能吗?

我连接使用的SqlConnection数据库和SqlCommand的C#.NET的声明

谢谢。

+1

你面对任何问题时,你试过吗? – 2012-03-07 11:08:48

+0

当然可以:使用两个连接对象。你有什么麻烦吗? – AngeloBad 2012-03-07 11:10:46

+0

不,我还没有尝试过,我在谷歌上搜索一下尝试之前,发现它被认为是不好的设计/做法,但并没有发现到底为什么,所以我想我应该问在这里。实际上,我使用的数据库是两个完全不同的数据库,但第二个数据库还需要客户端表(在第一个数据库中)来检查现有的电子邮件地址。我也是执行基于新的或现有的电子邮件的决定非常关键的操作,因为这将决定邮件是否是有关销售部门或支持部门,所以如果这种做法有任何问题,然后我放弃它。 – Ahmed 2012-03-07 11:19:55

回答

5

是的,这是可能的。

您可以返回一个值,以你的asp.net应用程序,然后连接到另一个数据库,如:

cmdEmailExists SqlCommand = new SqlCommand("SQL HERE...", Conn1); 

if (((int)cmdEmailExists.ExecuteScalar())>0){ 
    cmdInsert SqlCommand = new SqlCommand("SQL INSERT HERE...", Conn2) 
    cmdInsert.ExecuteNonQuery(); 
} 

Conn1Conn2是连接到2个不同的数据库,2个不同的SqlConnection的。

或者这可以在SQL年底完成,如:

IF EXISTS(SELECT Email FROM [Database1].dbo.tbl) 
BEGIN 
    INSERT INTO [Database2].dbo.tbl .......... 
END 
1

可能是这可以帮助你 或发布我们的代码

SqlConnection con1 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["con1"].ConnectionString); 
    SqlConnection con2 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["con2"].ConnectionString); 

    SqlCommand cmd = new SqlCommand("select * from table1", con1); 
    SqlDataReader dr; 
    con1.Open(); 
    dr = cmd.ExecuteReader(CommandBehavior.SingleResult); 
    while (dr.Read()) 
    { 
    // .... 
    }dr.Close() 

    //your condition then fire insert commnd with connection con2 

    SqlCommand insertcmd = new SqlCommand("insert into table2", con2); 
    SqlDataAdapter dap = new SqlDataAdapter(insertcmd); 

// ...

0

这是很好解决方案,但不是正确的答案!没有必要使用2连接字符串,以便在同一台服务器上使用2个不同的数据库(只要用户具有正确的权限)。我们在连接过程中指定初始目录,来定义我们想要运行的查询,但如果用户有足够的权限对​​其他数据库执行查询,他可以用两个点Db..table符号做

此代码将使用一个连接字符串!

SqlConnection con = new SqlConnection(@"Use-connection-string-here"); 
SqlCommand cmd = new SqlCommand(
"select * from Table1 t1 left join Database2..Table2 t2 on t1.id = t2.id", con 
);