用C#代码创建SQL Express 2008数据库,但尝试与系统管理员连接时登录失败

用C#代码创建SQL Express 2008数据库,但尝试与系统管理员连接时登录失败,c#,sql-server-2008-express,C#,Sql Server 2008 Express,我有一段代码,在运行时创建SQL Server Express 2008,然后尝试连接到它以在Transact-SQL中执行数据库初始化脚本。创建数据库的代码如下所示: private void CreateDatabase() { using (var connection = new SqlConnection( "Data Source=.\\sqlexpress;Initial Catalog=master;" +

我有一段代码,在运行时创建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”


我完全被这个错误弄糊涂了,因为我试图连接的帐户具有系统管理员权限,这应该允许我连接任何数据库(请注意,我首先使用到主数据库的连接来创建数据库)。

您登录的用户是否有权访问数据库“TestData”

如果未授予用户所需的权限

我不确定这是否意味着什么,但在您的第一次创建中,您正在连接到服务器

.\\sqlexpress
第二个是

.\SQLExpress

在创建数据库之后,但在尝试打开与该数据库的连接之前,需要发出CREATE USER命令(请参阅:)

例如:

CREATE USER 'MYDOMAIN\myusername' FOR LOGIN 'MYDOMAIN\myusername'

在创建用户实例时指定User Instance=True,而在尝试连接到它时指定User Instance=True,有什么原因吗


当您在与用户实例连接后创建它时,它将创建数据库文件,但不会将其附加到实际实例。您可以不在第一个连接字符串中指定User Instance=True,也可以将其添加到第二个连接字符串中并指定要使用的数据库文件。

第二个连接字符串是文本字符串,而第一个连接字符串不是文本字符串,这解释了\vs.\\的区别。我登录的用户是系统管理员。。。它应该自动拥有权限。。。还是不?它也是我创建数据库时首先使用的帐户。关于连接字符串,第一个字符串有一个双\\因为\是C#中的转义字符;第二个没有,因为我在字符串之前使用了“@”,因此没有必要转义\问题是必须在目标数据库中执行CREATE USER语句(文档中说CREATE USER“将用户添加到当前数据库”)。我必须先连接到数据库才能执行语句,这正是我不能做的。。。还是我做错了什么?你是对的。我没有注意到区别。当我在两个连接中都应用User Instance=true时,它会工作。非常感谢。