sql如何向远程数据库插入数据,并且如果发生错误,如何能回滚呢??

解决方案 »

  1.   

    这个 可以 实现 的 
    你数据库 要先把远程数据库注册到本地 
    然后 就是语句 
    例如select * from [192.168.0.130].bbs.dbo.users  
    如果和 本地数据库 还有交互 
    例如select * from [192.168.0.130].bbs.dbo.users as t1 left join [192.168.0.148].user.dbo.users as t2 on t1.username=t2.username  其他的同理 
      

  2.   


          /// <summary>
            /// 执行多条SQL语句,实现数据库事务。
            /// </summary>
            /// <param name="SQLStringList">多条SQL语句</param>
            public static int ExecuteSqlTran(List<String> SQLStringList)
            {
                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    SqlTransaction tx = conn.BeginTransaction();
                    cmd.Transaction = tx;
                    try
                    {
                        int count = 0;
                        for (int n = 0; n < SQLStringList.Count; n++)
                        {
                            string strsql = SQLStringList[n];
                            if (strsql.Trim().Length > 1)
                            {
                                cmd.CommandText = strsql;
                                count += cmd.ExecuteNonQuery();
                            }
                        }
                        tx.Commit();
                        return count;
                    }
                    catch
                    {
                        tx.Rollback();
                        return 0;
                    }
                }
            }
      

  3.   

    如果插入单行记录的话
     失败了就会自动回滚,SQL默认的就是隐式事务如果插入多行的话
    就只能手动开启显式事务了
    判断是否成功或者失败
    然后提交或者回滚
      

  4.   

    [192.168.0.130].bbs.dbo.users
    [192.168.0.130] 组名
    bbs数据库名
    users 表名 
      

  5.   

    数据库还有什么远程不远程?连上了,操作和本地没什么区别。
    回滚是事务的概念,你定义一个事务。
    事务开始
      执行第一条:delete from table1
      执行第二条: delete from table2
    事务结束
    如果这个过程中发生了错误,就会全部取消,不会只执行了一半。
    这是C#执行事务的方法:
    http://blog.csdn.net/greatverve/archive/2008/11/19/3332569.aspx
    这是事务的例子:
    http://blog.csdn.net/greatverve/archive/2008/11/03/3208286.aspx
      

  6.   

    #region ---调用事务处理---
                SqlConnection conn = new SqlConnection(Conn.SqlConn);//连接远程数据库
                conn.Open();
                SqlTransaction sp = conn.BeginTransaction();
                try
                {
                    bool success = false;
                    foreach (REQUISTION_FORM_DETAIL detail in requistion.Details)
                    {
                        UpdateState(detail.F_FITTING_MAIN_ID, username, itemid, sp);
                    }
                    success = true;
                    sp.Commit();
                    return success;
                }
                catch (Exception ex)
                {
                    sp.Rollback();
                    throw ex;
                }
                finally
                {
                    conn.Close();
                }
                #endregion如果同时两个数据库的话,就不能使用事务回滚了
    你向远程数据库插入数据涉及几个数据库?
      

  7.   

    我是只能写一个存储过程······其中的步骤:向远程数据库中的 abc 表的 a 列 和 b 列插入数据   (这个是第一个问题,如何能实现呢···刚才楼上说的我有点迷糊,能不能具体一些呢??)
    然后,如果发生错误,我能不能把刚才插入 远程数据库 abc 表的数据给回滚掉   (这是我的第二个问题,能不能直接用代码写一下呢···谢谢!!)
      

  8.   

    bool flag=调用插入方法()//方法返回bool值
    if(flag)
    {
    sp.Commit();}
    else
    {
    sp.Rollback();
    }
      

  9.   

    或在同一个方法中写
    int count=插入语句影响的行数
    对count进行判断
      

  10.   

    我是要 insert 而不是 select·····如果说同理····那么请给我举一个 insert 的例子······
      

  11.   

     
     BEGIN TRANSACTION
        .....................
      COMMIT TRANSACTION
      

  12.   

    这是我在网上搜索的一个方法,不知道怎么用····请大家指教····??
      create   database   link   lname   connect   to   username   identified   by   pword   using   'conn1';//'conn1'为连接字符串,连接到另一个服务器。   
      在触发器里面要操作另一个服务器上的表或其它对象时加@lname   
      如:向另一个数据库中的tbname表中插入数据。   
      insert   into   tbname@lname   values('aaa','bbb');   
    我不知道这个具体怎么改,能实现我向远程数据库 insert 数据~~???
      

  13.   


    1.你把连本地数据库的IP换成远程的数据库IP就成了啊。
    2.使用事务是可以的