2

実行時に 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 権限があり、任意のデータベースに接続できるため、このエラーに完全に困惑しています (最初にマスター データベースへの接続を使用してデータベースを作成していることに注意してください)。

4

3 に答える 3

4

作成時に User Instance=True を指定し、接続時に指定しない理由はありますか?

ユーザー インスタンスに接続した後に作成すると、データベース ファイルが作成されますが、実際のインスタンスにはアタッチされません。最初の接続文字列で User Instance=True を指定しないか、2 番目の接続文字列に追加して、使用するデータベース ファイルを指定する必要があります。

于 2010-05-13T13:15:27.280 に答える
0

データベースを作成した後、そのデータベースへの接続を開こうとする前に、CREATE USER コマンド ( http://msdn.microsoft.com/en-us/library/ms173463.aspxを参照) を発行する必要があります。

例えば:

CREATE USER 'MYDOMAIN\myusername' FOR LOGIN 'MYDOMAIN\myusername'
于 2010-05-13T13:09:14.707 に答える
0

ログに記録しているユーザーは、データベース 'TestData' に対する権限を持っていますか?

そうでない場合は、ユーザーに必要な権限を付与してください。

これが何かを意味するかどうかはわかりませんが、最初の作成ではサーバーに接続しています

.\\sqlexpress

二つ目は

.\SQLExpress
于 2010-05-13T13:02:45.710 に答える