use*_*486 6 c# sql sql-server ado.net
我有分布式数据库架构,其中数据存储在多个SQL服务器中.
如何通过运行单个查询来选择/更新/删除.例如,"select*from employees"应该从我拥有的所有数据库中返回数据.
如何编写跨多个SQL服务器运行的单个查询,并将单个统一视图添加到我的Web服务器.
注意:由于SQL服务器的数量可能会在不同的时间发生变化,因此我正在寻找除链接查询之外的其他内容,因为大规模管理链接查询(向上或向下)是一件很大的痛苦
要与不同的数据库/连接通信,您需要通过TransactionScope进行分布式事务 ; 幸运的是,这实际上比db-transactions 更容易(尽管您需要对System.Transactions.dll的引用):
using(TransactionScope tran = new TransactionScope()) {
// lots of code talking to different databases / connections
tran.Complete();
}
Run Code Online (Sandbox Code Playgroud)
此外,TransactionScope自然嵌套,SqlConnection自动登记,使其非常易于使用.
如果在范围内打开到不同服务器的连接,事务将升级为分布式事务。
例子:
using (TransactionScope scope = new TransactionScope())
{
conn1.Open(); //Open connection to db1
conn2.Open(); //Open connection to db2
// Don't forget to commit the transaction so it won't rollback
scope.Complete()
}
Run Code Online (Sandbox Code Playgroud)