【发布时间】:2013-06-21 09:14:21
【问题描述】:
我正在尝试创建一个数据库,但是一旦创建,我就无法连接到它。
服务器是 Microsoft SQL Server 2008 并使用 .Net 4.5。我们使用 SMO 创建数据库,但我们通常使用Dapper 连接和查询数据库。
这是我到目前为止的代码,它有效:
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connectionString);
Microsoft.SqlServer.Management.Smo.Server srv = new Microsoft.SqlServer.Management.Smo.Server(new Microsoft.SqlServer.Management.Common.ServerConnection(con));
var database = new Microsoft.SqlServer.Management.Smo.Database(srv, dbName);
database.Create(false);
database.Roles["db_datareader"].AddMember(???);
database.Roles["db_datawriter"].AddMember(???);
database.Roles["db_backupoperator"].AddMember(???);
srv.Refresh();
注意到??? 了吗?我试过了
System.Environment.UserDomainName + "\\" + System.Environment.UserName
和
System.Environment.UserName
但它失败(更新)错误Add member failed for DatabaseRole 'db_datareader'. 两个值。
问题是,当我创建数据库时,由于某种原因(使用 Dapper),我无法从同一个程序连接到它。 (更新)我收到错误消息:Cannot open database \"<database_name>\" requested by the login. The login failed.\r\nLogin failed for user '<domain>\\<username>'(其中<database_name> 是数据库名称,<domain> 我的登录域,<username> 我的 Windows 登录)。
我错过了什么吗?我在做正确的事吗?我试过在网上搜索,但似乎没有人以这种方式创建数据库。方法有,应该可以的吧?
** 更新 **
如果我注释 database.Roles["..."].AddMember(...) 行,并在 srv.Refresh() 添加断点,从那里恢复程序可以解决所有问题。
为什么断点可以解决一切?我不能只在生产中破坏程序......也不能在每次创建数据库时破坏程序。
【问题讨论】:
-
您的意思是,如果您使用 SMO 创建数据库,那么您可以永远使用 Dapper 连接到它?你能用 Dapper 连接到任何个数据库吗?
-
您在尝试将成员添加到角色时说“失败”,但实际的错误消息是什么?你有没有打印出你传递的字符串,看看它们是不是你认为的那样?
-
@RBarryYoung,当我使用 MSSMS 创建数据库时,我可以连接 Dapper。我的问题是当我使用 SMO 程序创建一个时。
-
再一次,您是说如果您使用 SMO 创建数据库,那么您可以永远使用 Dapper 连接到它?
-
@RBarryYoung,不,我现在正在更新问题。
标签: c# sql-server-2008