私は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ビットマシンにインストールできません。