2012-09-26 142 views
0

我正在处理两个数据库。从服务器中的第一个数据库中,我使用存储过程将所有表和本地计算机插入到一个空数据库中。Sql - 未连接到本地数据库

这是我的存储过程:

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;[email protected]"; 
      con.Open(); 
      SqlConnection conn = new SqlConnection(connectionstringLOCAL); //string connectionstringLOCAL = "Data Source=Clientname;Initial Catalog=Audit;uid=sa;[email protected]"; 
      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找不到服务器 '客户端名'。验证是否指定了正确的服务器名称。如有必要,请执行存储过程sp_addlinkedserver以将服务器添加到sys.servers。

现在怎么办?

回答

0

首先检查表

select * from sys.servers 

检查是否包含服务器名称 “客户端名”。

如果没有,你需要添加链接的服务器执行插入operation.This意味着你的服务器上你要添加的客户端服务器名称作为链接服务器。

或者

可以使用C#.NET SqlBulkCopy的方法容易地进行数据传输。