首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

[]怎么将远程服务器数据库中的部分数据读取到另外一个远程服务器数据库中

2014-01-03 
[求助]如何将远程服务器数据库中的部分数据读取到另外一个远程服务器数据库中需要写.net后台,不是在sql中

[求助]如何将远程服务器数据库中的部分数据读取到另外一个远程服务器数据库中
需要写.net后台,不是在sql中操作!
错误提示,Named Pipes Provider, error: 40 。设置没有问题,用sql可以连接,所以还是程序的问题。小弟初到公司乍到,各位大侠给看看吧
我的思路是,先连接一个远程服务器,然后在上面建立链接服务器,然后进行数据操作,应该没有错吧?

//创建链接服务器
        string linkserver = "EXEC master.dbo.sp_addlinkedserver @server = N'Link',@srvproduct=N'ms',@provider=N'SQLOLEDB',@datasrc=N'*.*.*.*:*'";
        string linklogin = "EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'Link',@locallogin = NULL,@useself = N'false',@rmtuser=N'*admin',@rmtpassword='*";
//这个没有用到,需要怎么操作?
        //判断链接服务器是否存在
        string linkexist = "select count(*) from master..sysservers where srvname='Link'";
        //链接字符串
        string connstring = "Server=Link;Database=Book;User ID=caijiadmin;PassWord=caiji@159.com";//远程数据库1
        string connstring1 = @"Data Source=.\SQLEXPRESS;AttachDbFilename=d:\sun\Desktop\Admin2\App_Data\Database.mdf;Integrated Security=True;User Instance=True";//本地数据库1

        
        if(IsLink(connstring1,linkexist))//判断链接服务器是否存在。存在:进行数据读取;不存在:创建
        {
            int datanums = GetCounts(connstring, "select count(*) from Link.Book.dbo.BookInfo");
            count.Text = datanums.ToString();
        }
        else
        {
            if (LinkData(connstring1, linkserver))//创建链接服务器.创建成功:读数据;失败:
            {
                int datanums = GetCounts(connstring, "select count(*) from Link.Book.dbo.BookInfo");
                count.Text = datanums.ToString();
            }
            else
            { }
        }
    }
    //返回表的记录总数
    public int GetCounts(string connstring, string cmdstring)
    {
        using (SqlConnection conn = new SqlConnection(connstring))
        {
            SqlCommand cmd = new SqlCommand(cmdstring, conn);
            try
            {
                conn.Open();
                int i = Convert.ToInt32(cmd.ExecuteScalar());
                return i;
            }
            catch (System.Data.SqlClient.SqlException e)
            {
                throw new Exception(e.Message);
            }
        }
    }
    //创建链接服务器
    public bool LinkData(string connstring, string cmdstring)
    {
        using (SqlConnection conn = new SqlConnection(connstring))
        {
            SqlCommand cmd = new SqlCommand(cmdstring, conn);
            try
            {
                conn.Open();
                int i = cmd.ExecuteNonQuery();
                if (i > 0)
                    return true;
                else


                    return false;
            }
            catch (System.Data.SqlClient.SqlException e)
            {
                throw new Exception(e.Message);
            }
        }
    }
    //是否存在链接服务器
    public bool IsLink(string connstring, string cmdstring)
    {
        using (SqlConnection conn = new SqlConnection(connstring))
        {
            SqlCommand cmd = new SqlCommand(cmdstring, conn);
            try
            {
                conn.Open();
                if (Convert.ToInt32(cmd.ExecuteScalar()) > 0)
                {
                    return true;
                }
                else
                    return false;
            }
            catch (System.Data.SqlClient.SqlException e)
            {
                throw new Exception(e.Message);
            }
        }
    }


上面是用一个本地数据库,一个用远程服务器进行测试的
[解决办法]
实例名错误,即服务器名错误导致数据库访问不到服务器
应该用 机器名\实例名 作为服务器名

目测是你这个写错了 
string connstring = "Server=Link;Database=Book;User ID=caijiadmin;PassWord=caiji@159.com";//远程数据库1
       
[解决办法]
你用链接服务器开启两个远程服务器的连接就可以操作了,没必要还写C#
[解决办法]
EXEC master.dbo.sp_addlinkedserver @server = N'Link',@srvproduct=N'ms',@provider=N'SQLOLEDB',@datasrc=N'*.*.*.*:*'";
        string linklogin = "EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'Link',@locallogin = NULL,@useself = N'false',@rmtuser=N'*admin',@rmtpassword='*";


这个是不是写错了吧

热点排行