実行時に SQL Server Express 2008 を作成し、それに接続して Transact-SQL でデータベース初期化スクリプトを実行しようとするコードがあります。データベースを作成するコードは次のとおりです。
private void CreateDatabase()
{
using (var connection = new SqlConnection(
"Data Source=.\\sqlexpress;Initial Catalog=master;" +
"Integrated Security=true;User Instance=True;"))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText =
"CREATE DATABASE " + m_databaseFilename +
" ON PRIMARY (NAME=" + m_databaseFilename +
", FILENAME='" + this.m_basePath + m_databaseFilename + ".mdf')";
command.ExecuteNonQuery();
}
}
}
データベースが正常に作成されました。その後、次のコードを使用して、データベースに接続して初期化スクリプトを実行しようとします。
private void ExecuteQueryFromFile(string filename)
{
string queryContent = File.ReadAllText(m_filePath + filename);
this.m_connectionString = string.Format(
@"Server=.\SQLExpress; Integrated Security=true;Initial Catalog={0};", m_databaseFilename);
using (var connection = new SqlConnection(m_connectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = queryContent;
command.CommandTimeout = 0;
command.ExecuteNonQuery();
}
}
}
ただし、connection.Open() ステートメントは失敗し、次の例外がスローされます。
ログインで要求されたデータベース「TestData」を開けません。ログインに失敗しました。ユーザー「MYDOMAIN\myusername」のログインに失敗しました。
接続しようとしているアカウントには sysadmin 権限があり、任意のデータベースに接続できるため、このエラーに完全に困惑しています (最初にマスター データベースへの接続を使用してデータベースを作成していることに注意してください)。