2012-03-07 1 views
3

Является ли подключение к двум базам данных SQL одновременно? Я имею в виду, что из одной базы данных я читаю записи и сравниваю их с некоторыми данными, такими как адрес электронной почты, и на основе решения о том, существует ли этот адрес электронной почты в базе данных или нет. Я сохраняю новую запись в другой базе данных.ASP.net Подключение к двум базам данных сразу?

Возможна ли такая двойная операция?

Я соединяясь с базами данных, используя SqlConnection и SqlCommand заявления C# .net

спасибо.

+1

Вы столкнулись с какой-либо проблемой, когда пытались? –

+0

Конечно можно: использовать два объекта связи. У вас возникли проблемы? – AngeloBad

+0

Нет, я не пробовал, я искал это, прежде чем пытаться и обнаружил, что это считается плохим дизайном/практикой, но не нашел почему именно так, я думал, что должен попросить здесь. Фактически базы данных, которые я использую, представляют собой две совершенно разные базы данных, но вторая таблица клиентов (в первой базе данных) также необходима второй базе данных для проверки существующих адресов электронной почты. Также я выполняю очень критичную операцию, основанную на решении нового или существующего электронного письма, потому что он будет решать, будет ли сообщение электронной почты о отделе продаж или отделе поддержки, поэтому, если у этого подхода есть какие-то проблемы, я его отбрасываю. – Ahmed

ответ

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(); 
} 

Где Conn1 и Conn2 2 различных SqlConnection «s, соединяющиеся с 2 различными базами данных.

Или это может быть сделано в конце 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 
);