1

我在 32 位 Win7 机器上开发了一个 Windows Forms 应用程序,并在同一台机器上安装了一个 SQL Server 2008 进行测试。发布环境的数据库服务器有64位。当我在与 64 位 SQL Server 连接的发布环境中的客户端(32 位)上安装应用程序时,当我的代码尝试使用 SQL Server 管理对象(SMO)时出现以下故障:

导致失败的代码:

        private static bool createDatabase(string dbName, string sqlPath, string connStr)
    {
        FileInfo file = new FileInfo(sqlPath + dbName + ".sql");
        string strscript = file.OpenText().ReadToEnd();
        bool result;
        string test = "CREATE DATABASE [" + dbName + "]";

        try
        {
            SqlConnection connection = new SqlConnection(connStr);
            using (connection)
            {
                using (SqlCommand sqlCmd = new SqlCommand(test, connection))
                {
                    connection.Open();
                    sqlCmd.ExecuteNonQuery();
                    connection.Close();
                    result = true;
                }
            }

            if (result == true)
            {
                connStr = connStr + ";Initial Catalog=" + dbName;
                SqlConnection sqlConnection = new SqlConnection(connStr);
                ServerConnection svrConnection = new ServerConnection(sqlConnection);
                Server server = new Server(svrConnection);

                server.ConnectionContext.ExecuteNonQuery(strscript); // Here the app crashes
            }
        }
        catch (SqlException ae)
        {
            result = false;
            System.Windows.Forms.MessageBox.Show(ae.Message.ToString());
        }
        return result;
    }

失败信息:

应用程序:XingaAdmin.exe 框架版本:v4.0.30319 应用程序:Der Prozess wurde aufgrund einer unbehandelten Ausnahme bedet。Ausnahmeinformationen: System.IO.FileNotFoundException Stapel: bei System.Reflection.RuntimeAssembly._nLoad(System.Reflection.AssemblyName, System.String, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, Boolean , Boolean, Boolean) bei System.Reflection.RuntimeAssembly.nLoad(System.Reflection.AssemblyName, System.String, System.Security.Policy.Evidence, System.Reflection.RuntimeAssembly, System.Threading.StackCrawlMark ByRef, Boolean, Boolean, Boolean ) bei System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(System.Reflection.AssemblyName, System.Security.Policy.Evidence, System.Threading.StackCrawlMark ByRef, Boolean, Boolean) bei System.Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery (System.String, Microsoft.SqlServer.Management.Common.ExecutionTypes) bei XingaCommonClasses.Utilities.Database.DatabaseHelper.createDatabase(System.String, System.String, System.String) bei XingaCommonClasses.Utilities.Database.DatabaseHelper.checkDatabase(System.Collections.Generic.List`1, System.String) bei XingaAdmin.Program.Main()

数据库创建良好,但没有执行创建表的 sql 脚本。

我是否可能必须使用 64 位版本的 SQL Server 管理对象 (SMO)?但是,如果,我怎样才能得到这个版本。我无法在 32 位机器上安装 64 位版本。

4

1 回答 1

1

此问题包含相同的堆栈跟踪,但堆栈转储还包含有关未能加载哪个 SMO 程序集的信息。使用 try-catch 块将堆栈跟踪转储到异常中。

SQL Server 机器需要安装 64 位 SMO 库。

于 2012-06-06T11:27:02.340 回答