Я пытаюсь создать базу данных, но после ее создания я не могу подключиться к ней.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();
Noce ???
? Я попытался
System.Environment.UserDomainName + "\\" + System.Environment.UserName
и
System.Environment.UserName
но оказалась неудачной (обновление) с ошибкой Add member failed for DatabaseRole 'db_datareader'.
с обоими значениями.
Проблема в том, что когда я создаю базу данных, я не могу с ней поработать по какой-либо причине (используя Dapper) из той же программы. (update) Я получаю сообщение об ошибке: Cannot open database \"<database_name>\" requested by the login. The login failed.\r\nLogin failed for user '<domain>\\<username>'
(где <database_name>
- это имя базы данных, <domain>
мой домен входа и <username>
мой вход в систему Windows).
Я что-то не хватает? Правильно ли я делаю? Я пробовал искать в Интернете, но, похоже, никто не создает базу данных таким образом. Методы есть, он должен работать, нет?
** Update **
Если я комментирую database.Roles["..."].AddMember(...)
строки, и добавить точку останова на srv.Refresh()
, возобновив программу оттуда решает все.
Почему точка останова решает все? Я не могу просто разбить программу на производстве ... и не прерывать программу при создании базы данных каждый раз.
Вы хотите сказать, что если вы создаете базу данных с SMO, вы можете * никогда не подключаться к ней с помощью Dapper? Можете ли вы подключиться к * любым * базам данных с Dapper? – RBarryYoung
Когда вы пытаетесь добавить участника в роль, вы говорите «сбой», но каково фактическое сообщение об ошибке? Вы распечатали строки, которые вы проходите, чтобы узнать, являются ли они такими, какими вы считаете? – RBarryYoung
@RBarryYoung, я могу подключиться к Dapper, когда создаю базу данных с помощью MSSMS. Моя проблема заключается в том, что я процедурно создаю ее с SMO. –