我有一个 VS 2010 数据库项目,它需要对 Dynamics CRM 数据库的数据库引用。我可以远程访问 32 位 Windows 2003 R2 SP2 服务器。我的策略是创建一个 .dbschema 文件并将其用作参考。
我发现用于创建 .dbschema 文件的两个最佳资源来自stackoverflow和MSDN。
我收到的错误是:
无法从提供的连接字符串确定数据库架构提供程序。检查连接字符串对于用于数据库提供程序的 ADO.NET 提供程序是否有效,以及您是否具有连接到服务器所需的权限。
我所做的步骤是:
- 创建一个临时文件夹 C:\temp
- 将文件夹 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VSTSDB\Deploy 的内容复制到 C:\temp
- 将文件夹 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5 下面列表中的一些 DLLS 复制到 C:\temp
此时 MSDN 说明说我应该拥有这些文件
- DatabaseSchemaProviders.Extensions.xml
- Microsoft.Data.Schema.dll
- Microsoft.Data.Schema.ScriptDom.dll
- Microsoft.Data.Schema.ScriptDom.Sql.dll
- Microsoft.Data.Schema.Sql.dll
- Microsoft.SqlServer.BatchParser.dll
- Sqlceer35en.dll
- Sqlceme35.dll
- Sqlceqp35.dll
- Sqlcese35.dll
- System.Data.SqlServerCe.dll
- VSDBCMD.EXE
这几乎是真的。
- DatabaseSchemaProviders.Extensions.xml 实际上位于 C:\temp\Extensions\SqlServer\ 所以我也将它复制到 C:\temp 以防它需要位于同一目录级别
Microsoft.SqlServer.BatchParser.dll 在 GAC 中找到,所以大概我不需要将它复制到 C:\temp 但我还是这样做了,采用 32 位版本,因为我的其他 DLL 来自 Program Files (x86 )。
- 我尝试从 C:\temp 本地运行 VSDBCMD,并以管理员身份运行 CMD。我还将 C:\temp 复制到服务器并尝试在那里运行它。
VSDBCMD /a:Import /cs:"Provider=SQLOLEDB.1;Password=********;Persist Security Info=True;User ID=sa;Initial Catalog=VANILLA_MSCRM;Data Source=***** ***" /dsp:Sql /model:VANILLA_MSCRM.dbschema
我已经尝试了 Data Sources = {., (local), localhost, the IP address, the machine name, the domain name} 与 Providers = {SQLOLEDB.1, SQLNCLI10.1, SQLNCLI.1} 的所有组合。所有都会导致相同的错误。显然 ., (local) 和 localhost 仅在从服务器运行时使用。我通过 UDL 文件 (\ http://msdn.microsoft.com/en-us/library/e38h511e%28VS.71%29.aspx ) 构建连接字符串来测试我的连接字符串。正如这篇文章所建议的 \ http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/dabd14fa-a805-4855-b3f1-33b37b16c5b1我尝试了 sqlcmd 并且可以成功运行它。
如何解决此问题?我创建一个 .dbschema 文件来引用我的 CRM 数据库的策略是一种错误的方法吗?