1

私は32ビットWin7マシンでWindowsフォームアプリケーションを開発し、同じマシン上にテスト用のSQLServer2008を持っています。リリース環境のデータベースサーバーは64ビットです。64ビットSQLServerに接続されているリリース環境のクライアント(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;
    }

失敗メッセージ:

Anwendung:XingaAdmin.exe Frameworkversion:v4.0.30319 Beschreibung:Der Prozess wurde aufgrund einer unbehandeltenAusnahmebedet。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)beiSystem。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-scriptは実行されません。

64ビットバージョンのSQLServer管理オブジェクト(SMO)を使用する必要がある可能性はありますか?しかし、もしそうなら、どうすればこのバージョンを入手できますか。64ビットバージョンを32ビットマシンにインストールできません。

4

1 に答える 1

1

この質問には同じスタックトレースが含まれていますが、スタックダンプには、どのSMOアセンブリがロードに失敗したかに関する情報も含まれています。try-catchブロックを使用して、例外のスタックトレースをダンプします。

SQL Serverマシンには、64ビットSMOライブラリがインストールされている必要があります。

于 2012-06-06T11:27:02.340 に答える