Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C使用同一ObjectDataSource更新多个数据库#_C#_.net_Ado.net - Fatal编程技术网

C# 使用C使用同一ObjectDataSource更新多个数据库#

C# 使用C使用同一ObjectDataSource更新多个数据库#,c#,.net,ado.net,C#,.net,Ado.net,有没有一种方法可以使用C#中的单个ObjectDataSource更新具有相同模式的多个数据库 i、 仅通过提供多个连接字符串,是否有可能更新多个数据库?我需要使用C#中的ObjectDataSource在具有相同模式的多个数据库中更新/插入相同的记录 我会说不;我认为这是不可能的,因为SqlCommand必须与一个连接字符串关联 既然您使用的是ObjectDataSource,为什么不编写一个处理它的“中间层”对象呢?通常,我将有一个名为CustomerManager的类,它公开ObjectD

有没有一种方法可以使用C#中的单个ObjectDataSource更新具有相同模式的多个数据库


i、 仅通过提供多个连接字符串,是否有可能更新多个数据库?我需要使用C#中的ObjectDataSource在具有相同模式的多个数据库中更新/插入相同的记录

我会说不;我认为这是不可能的,因为SqlCommand必须与一个连接字符串关联

既然您使用的是ObjectDataSource,为什么不编写一个处理它的“中间层”对象呢?通常,我将有一个名为CustomerManager的类,它公开ObjectDataSource为CRUD操作所需的所有方法

假设您正在更新一个客户的地址,并且需要接触另一个数据库:CustomerManager类中的Update(…)方法可以在该方法内调用这两个数据库。这种方法的好处是,您甚至可以将所有内容包装在TransactionScope块中,如果您正在更新多个数据库,.NET将自动将事务“升迁”为分布式事务


我希望这有足够的道理让你走上正确的方向

是的,您可以这样做,因为对于ObjectDataSource,您就是编写代码进行插入的人。在“Update”和“Delete”方法中,您可以简单地执行两个数据库操作,每个数据库一个。您可以将其抽象为一个可以传递给连接的操作,以确保不会到处都有重复的代码

注意
您不能通过单个连接来实现这一点,必须执行两个完全独立的数据库操作

示例

根据评论,有人要求提供更多细节

基本上,在每个方法中,只需执行两个db调用,下面是一个粗糙且格式不正确的示例,用于说明“delete”方法的概念


显然,需要使用存储过程,以及正确使用语句或try/catch,但这会让人明白这一点。

不确定您打算做什么,但如果您的目标是在某台服务器发生崩溃时避免数据丢失,许多数据库服务器可以自动将所有数据复制到备份服务器。 如果您想了解更多信息,请在谷歌上搜索“sql群集”

并考虑“Mitchel Sellers”的建议和一些更改:-

对于ObjectDataSource创建OnInserting、OnUpdate、OnDelete事件,在这些事件中,处理除附加到ObjectDataSource的数据库之外的所有数据库的插入/更新/删除

e、 g

<> > <强> > DATACONNECTION 1S/<强>,<强> > DATACONNECTION 2和<强> DATACONNECTION STRIG3,<强> > DATACONNECTION STRIG1附在<强> ObjutasDisturCE1中,然后考虑下面给出的ObjtDaskDeasOracle 1ObjutoTurp事件代码<…/P> 受保护的无效ObjectDataSource1\u对象更新(对象发送方,ObjectDataSourceMethodEventArgs e)

{

    string name = (string)e.InputParameters["name"];

    int id = (int)e.InputParameters["id"];

    if (string.IsNullOrEmpty(name))
        e.Cancel = true;

    else
    {
        // Here insert in all Databases currently present 
        // Except DB with StorageIndex = 1 as will b updated by ObjectDataSource1

        for (int index = 2; index <= 3; index++)
        {
            string DataConnectionString = ConfigurationManager.AppSettings["DataConnectionString " + index]);
            SqlConnection con = new SqlConnection(DataConnectionString);
            string query = "UPDATE student SET [name] = @name WHERE (([id] = @id))";
            int cnt = Utils.executeQuery(query, con, new object[] { "@name", "@id" }, new object[] { name, id });
        }
    }
} 
string name=(string)e.InputParameters[“name”];
int id=(int)e.InputParameters[“id”];
if(string.IsNullOrEmpty(name))
e、 取消=真;
其他的
{
//在此处插入当前存在的所有数据库
//除StorageIndex=1的数据库外,ObjectDataSource1将更新该数据库

对于(int index=2;index),我知道复制,但不习惯使用它。我只希望无论何时使用objectdatasource,如果它同时更新/插入我想要的一个数据库,它也应该更新其他数据库。。。
    string name = (string)e.InputParameters["name"];

    int id = (int)e.InputParameters["id"];

    if (string.IsNullOrEmpty(name))
        e.Cancel = true;

    else
    {
        // Here insert in all Databases currently present 
        // Except DB with StorageIndex = 1 as will b updated by ObjectDataSource1

        for (int index = 2; index <= 3; index++)
        {
            string DataConnectionString = ConfigurationManager.AppSettings["DataConnectionString " + index]);
            SqlConnection con = new SqlConnection(DataConnectionString);
            string query = "UPDATE student SET [name] = @name WHERE (([id] = @id))";
            int cnt = Utils.executeQuery(query, con, new object[] { "@name", "@id" }, new object[] { name, id });
        }
    }
}