Sql - 未连接到本地数据库

时间:2012-09-26 08:16:20

标签: c# sql sql-server-2008 stored-procedures

我正在使用两个数据库。从服务器中的第一个数据库,我将使用存储过程获取所有表并在本地计算机中插入一个空数据库。

这是我的存储过程:

SET ANSI_NULLS ON
 GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[ImportScriptAndData]

@Branch int,
@MainServer varchar(20),
@LocalServer varchar(20),
@LocalDBName varchar(20),
@AuditType int

AS Begin

set nocount on;


-- Delete the master tables

-- dbo.AuditArea
print ('delete from ['+ @LocalServer +'].['+ @LocalDBName +'].[dbo].AuditArea')
exec  ('delete from ['+ @LocalServer +'].['+ @LocalDBName +'].[dbo].AuditArea')

-- Insert data into master tables

-- dbo.AuditArea
print ('insert into ['+ @LocalServer +'].[HDFCAudit].dbo.AuditArea
select * from ['+ @MainServer +'].[HDFCAudit].dbo.AuditArea')
exec ('insert into ['+ @LocalServer +'].['+ @LocalDBName +'].dbo.AuditArea
select * from ['+ @MainServer +'].['+ @LocalDBName +'].dbo.AuditArea')

End

此存储过程位于服务器数据库上。

我在局域网上连接两台电脑。一个是服务器,另一个是客户端

在客户端应用程序上,当我想将所有表从服务器数据库带到本地空数据库时,我有一个可以单击的按钮。

我的点击按钮代码为:

SqlConnection con = new SqlConnection(newConn);  //string newConn = "Data Source=Servername;Initial Catalog=Audit;uid=sa;pwd=admin@123";
            con.Open();
            SqlConnection conn = new SqlConnection(connectionstringLOCAL); //string connectionstringLOCAL = "Data Source=Clientname;Initial Catalog=Audit;uid=sa;pwd=admin@123";
            conn.Open();
            BranchCode = Convert.ToInt32(cboBranch.SelectedValue.ToString());
            MainServer = "Servername";
            LocalServer = "ClientName"; //express
            LocalDatabase = "Audit";
            AuditType = 1;
            SqlCommand cmd = new SqlCommand("dbo.ImportScriptAndData", con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Branch", SqlDbType.Int)).Value = BranchCode;
            cmd.Parameters.Add(new SqlParameter("@MainServer", SqlDbType.VarChar)).Value = MainServer;
            cmd.Parameters.Add(new SqlParameter("@LocalServer", SqlDbType.VarChar)).Value = LocalServer;
            cmd.Parameters.Add(new SqlParameter("@LocalDBName", SqlDbType.VarChar)).Value = LocalDatabase;
            cmd.Parameters.Add(new SqlParameter("@AuditType", SqlDbType.Int)).Value = AuditType;
            //cmd.Parameters.AddWithValue("@Branch", BranchCode);
            //cmd.Parameters.AddWithValue("@MainServer", MainServer);
            //cmd.Parameters.AddWithValue("@LocalServer", LocalServer);
            //cmd.Parameters.AddWithValue("@LocalDBName", LocalDatabase);
            cmd.ExecuteNonQuery(); // **error on this line**

我在这一行上遇到以下错误:

  

在sys.servers中找不到服务器'clientname'。验证是否指定了正确的服务器名称。如有必要,执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。

现在该怎么办?

2 个答案:

答案 0 :(得分:0)

首先查看表格

select * from sys.servers 

检查是否包含服务器名称“clientname”。

如果不是,则需要添加链接服务器以执行插入操作。这意味着在服务器计算机上,您必须将客户端服务器名称添加为链接服务器。

您可以使用C#.net SqlBulkCopy 方法轻松执行数据传输。

答案 1 :(得分:0)

在两台服务器之间运行分布式查询。看到必须链接两台服务器。

USE master;
GO
EXEC sp_addlinkedserver 
   N'Other Server',
   N'SQL Server';
GO

链接:http://msdn.microsoft.com/fr-fr/library/ms190479.aspx