异地数据库更新

来源:互联网 发布:软件风险评估报告 编辑:程序博客网 时间:2024/04/29 00:00
最近发现以前编写的数据库导入存储过程突然无法使用了,真是百思不得其解,sqlserver都重装了几遍了还是没有解决问题。后面才猜想可能是远程数据库那里更改了安全配置,到现在还不能肯定这个问题,只有换了另外的方法实现。

    想法是导入远程数据库的数据到本地数据库,以前用的是:

(一)

--创建链接服务器  
  exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'  
  exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'用户名','密码'  
  go   
    
--查询示例  
  select   *   from   srv_lnk.数据库名.dbo.表名

本来用得好好的,后面不知道远端服务器更改了什么设置,运行中老是提示

System.Data.SqlClient.SqlException: 尚未注册 OLE DB 访问接口 "SQL Server"。

所以只好另外想他法。

(二)

采用热查询的方式,也由于远程服务器没有开通相应的功能而无法实现:

OPENDATASOURCE('SQLOLEDB','Data Source=ip地址;User ID=;Password=') 

(三)

只有通过Dataset+SqlDataAdapter+SqlCommandBuilder+Updata的方式实现了批量更新数据的功能,但是DataTable之间的数据拷贝还是只有逐条传递,所以运行效率明显没有上两个方法来得快。下面是具体实现代码:

string sConnectionString;
            sConnectionString = "Password=sa;User ID=sa;Initial Catalog=zdz;Data Source=(local)";
            SqlConnection objConn= new SqlConnection(sConnectionString);
            objConn.Open();
            // Create an instance of a DataAdapter.
            SqlDataAdapter daAuthors = new SqlDataAdapter("Select * From tenMinutesData", objConn);
            DataSet dsPubs = new DataSet();
            daAuthors.Fill(dsPubs, "tenMinutesData");

     //删除本地数据库以前的数据
            SqlCommand sqlCommand = new SqlCommand("DELETE FROM [zdz].[dbo].[tenMinutesData]", objConn);
            sqlCommand.ExecuteNonQuery();
     //

            SqlConnection sqlzdz = new SqlConnection("Password=;User ID=;Initial Catalog=ZCDelementinfo;Data Source=远程ip");
            sqlzdz.Open();
            string CommandText = "SELECT * FROM [StationInfo].[dbo].[StationInfo])";
            SqlDataAdapter dazdz = new SqlDataAdapter(CommandText, sqlzdz);
            dazdz.Fill(dsPubs, "tyh");

     //DataTable之间的数据拷贝还是只有逐条传递
            DataTable tbltenMinutesData=dsPubs.Tables["tenMinutesData"];
            DataTable tbltyh = dsPubs.Tables["tyh"];
            for (int i = 0; i < tbltyh.Rows.Count; i++)
            {
                tbltenMinutesData.Rows.Add(tbltyh.Rows[i].ItemArray);
            }
            //

            SqlCommandBuilder objCommandBuilder = new SqlCommandBuilder(daAuthors);
            daAuthors.Update(dsPubs, "tenMinutesData");

 
原创粉丝点击