Назначение существующего имени входа SQL для вновь созданной базы данных с помощью c # - PullRequest
0 голосов
/ 02 апреля 2019

Я занимаюсь разработкой приложения, в котором я создаю базу данных и развертываю несколько таблиц с использованием c # и SMO.

Я могу без проблем создать базу данных и все таблицы внутри базы данных.Я использую сценарий SQL в качестве шаблона и использую шаблон. Я устанавливаю таблицы внутри вновь созданной базы данных.Ниже приведен мой код.

public void CreateClientDatabase(string sDeployserver, string database)
        {
            SDeployServer = txtNbServer.Text.Trim().ToString();
            string sConStr = string.Concat(Utilities.Decrypt(sEncDataSource), SDeployServer, Utilities.Decrypt(sCoreConn));
            string sScriptText = "CREATE DATABASE " + database + string.Empty;

            try
            {
                using(sqlConnection = new SqlConnection(sConStr))
                {
                    ServerConnection svrConnection = new ServerConnection(sqlConnection);
                    Server server = new Server(svrConnection);
                    server.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
                    try
                    {
                        btnReset.Enabled = false;
                        btnExit.Enabled = false;
                        sqlConnection.Open();
                        server.ConnectionContext.ExecuteNonQuery(sScriptText);
}
catch (Exception ex)
                    {

                        MessageBox.Show(Resources.standard_error);
                        //RollbackDeployment(SDeployServer, database);
                        throw ex;
                    }
                    finally
                    {
                        sqlConnection.Close();
                    }                    
                }
            }

После создания базы данных я развертываю таблицы, используя приведенный ниже код;Что я делаю, я заменяю имя базы данных в шаблоне и запускаю скрипт, используя ExecuteNonQuery

public void DeployCoreTable(string sConStr, string database, SqlConnection sqlConnection, string SDeployServer)
        {
            SScriptFile = string.Empty;
            SUpdatedScript = string.Empty;
            try
            {
                FileInfo file = new FileInfo(Path.GetFullPath(Application.StartupPath + "/scripts/core_script.sql"));
                SScriptFile = file.OpenText().ReadToEnd();
                SUpdatedScript = SScriptFile.Replace("db_project", database);
                Server sUpdateServer = new Server(new ServerConnection(sqlConnection));
                sUpdateServer.ConnectionContext.ExecuteNonQuery(SUpdatedScript);
                lstInfo.Items.Add(Properties.Resources.coretable_success);
                lstInfo.Refresh();
            }
            catch (Exception e)
            {
                lstInfo.Items.Add(Resources.coretable_error);
                lstInfo.Items.Add(e);
                lstInfo.Refresh();
                MessageBox.Show(Resources.standard_error);
                if (sqlConnection.State == ConnectionState.Open)
                {
                    sqlConnection.Dispose();
                    sqlConnection.Close();
                }
                RollbackDeployment(SDeployServer, database);
            }
        }

Все работает нормально, и таким же образом я пытаюсь сопоставить существующий логин SQL с недавно созданнымбаза данных.Ниже приведен мой код SQL Script, который я использую в качестве шаблона;

USE [db_project]    

GO
/****** Object:  User [acuitydbuser]    Script Date: 02-04-2019 18:40:34 ******/
CREATE USER [dbuser] FOR LOGIN [dbuser] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE [db_owner] ADD MEMBER [dbuser]
GO

Однако, когда я выполняю вышеуказанный файл SQL из приложения форм c # windows, я получаю сообщение об ошибке, что пользователь уже существует с другой базой данных иследовательно не удалось.

Я пробовал много способов, однако я не могу связать существующий логин SQL с недавно созданной базой данных.Кто-нибудь может дать мне знать, как это сделать?Есть ли что-то, что мне нужно изменить в моем коде?

Любая помощь высоко ценится.

...