我想创建一个数据库,但一旦创建,我就无法连接到它。C#使用SMO以编程方式创建数据库
服务器是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
当您尝试将成员添加到角色时,您会说“失败”,但实际的错误消息是什么?你打印出你正在传递的字符串,看看它们是你认为的吗? – RBarryYoung
@RBarryYoung,当我使用MSSMS创建数据库时,我可以连接Dapper。我的问题是当我用SMO程序化地创建一个。 –