2011-09-23 157 views
1

我有VS2005 .NET C#程序。我的理解是,VS2005只针对.NET FW的2.0版本。该程序使用批量复制对象。我相信这个对象的源DLL是Version 2 Framework系统文件夹中的System.Data.dll文件。升级到SQL Server 2008:升级使用BCP的VS2005 .NET程序

我的猜测是在使用BulkCopy对象时,System.Data.dll必须调用BCP.exe的SQL Server 2005版本。目前,我们的数据库服务器上有BCP.exe的2005和2008版本。很快,2005版本将被删除,我需要确保我的.NET程序将继续运行。

我的想法是使用VS2008将应用程序升级到3.5版本的框架,我验证它是在数据库服务器上。事实上,我看到FW的所有版本都有,包括1,1,2,0,3.5和4.0。我在想,如果我升级到3.5版本的FW,2008版本的BCP.exe将被使用。

我如何知道我使用的批量拷贝(BCP.exe)的哪个版本,以确保当我们的数据库服务器上只保留2008 BCP.exe时,程序能够继续工作? enter image description here

回答

2

如果您在谈论SqlBulkCopy类,那么它根本不使用bcp.exe。因此,您的应用程序将在升级后按预期运行。

P.S. Framework版本和SQL Server版本之间没有连接。

+0

是的,我在谈论SqlBulkCopy类。我假设你的意思是写BCP.exe,而不是dcp.exe?如果FW版本和SQL Server版本之间没有连接,f我的PC上有多个版本的SQL Server,我怎么知道VS2005程序使用的是哪个版本? – ChadD

+0

要连接到SQL Server,您的应用程序使用连接字符串。在连接字符串中,您不仅指定服务器的名称,还指定服务器实例的名称。您可以在连接字符串中找到数据源属性。因此,“数据源= MYCOMPUTER \ INSTANCE_ON_SQL2005”和“数据源= MYCOMPUTER \ INSTANCE_ON_SQL2008”连接到同一台计算机上的SQL Server的不同实例。当然,他们可以有不同的版本。 –

+0

如果你不相信所有说bcp.exe不相关的答案,这是超级简单的检查方法。只是临时将bcp.exe重命名为其他内容,并尝试运行您的应用程序。 –

0
  • 如果您的应用程序,没有任何SQL Server安装精铸件一不同的服务器/ PC上运行,它仍然可以工作(假设你有.NET框架)
  • SqlBulkCopy类通话的Bcp.exe。这是绝对无关
  • 不要紧,可能会或可能没有安装什么版本的的Bcp.exe
  • 你的应用程序使用SqlBulkCopy的是不受SQL Server版本
1

MSDN docs的使用SqlBulkCopy :

Microsoft SQL Server包含一个流行的命令提示实用程序bcp,用于将数据从一个表移动到另一个表,无论是在单个服务器上还是在服务器之间。 SqlBulkCopy类允许您编写提供类似功能的托管代码解决方案。

换句话说,bcp.exe与您的问题无关。

较新版本的.NET Framework中包含的System.Data.SqlClient命名空间通常适用于较早的SQL Server版本;我还没有看到MSDN文档中没有提到SQL Server向后兼容性问题的地方。如您所说,最简单的方法就是重新编译.NET 3.5或4.0,以便获取最新的System.Data.SqlClient代码(它为您处理兼容性)。

如果您对它正在做什么感到好奇,可以在运行应用程序时运行Sql Server Profiler,并查看SqlBulkCopy实际正在生成的SQL。您应该看到相对简单的SQL,它可以验证与2008兼容。