Использование роли приложения SQL Server 2005 Express в нескольких формах в C # - PullRequest
1 голос
/ 25 февраля 2011

У меня есть приложение C # .net winforms с двумя формами, которое подключается к SQL Express с помощью строки подключения.

form1 подключается к SQL с доверенным подключением.Строка подключения указана в файле app.config.

Теперь нажимается кнопка на форме Form1, которая изменяет подключение к учетным данным роли приложения.

теперь открывается форма2, и у нее есть кнопка, при нажатии которой необходимо создать базу данных с использованием настроек роли приложения.

, как мне использовать настройки роли приложения, созданные в форме1, в форме2.потому что для выполнения запроса на создание базы данных Form2 нужен новый объект подключения.

Итак, мне нужно добавить еще один файл app.config или что-то еще?

------------------------ -------------------------------- EDITED--------------------

public partial class Form1 : Form
{
    SqlConnection conn = new SqlConnection();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
             //new code for using conenction string from app.config file added 
                //  Read appSettings
                    string title = ConfigurationSettings.AppSettings["ApplicationTitle"];
                    string connectString =
                    ConfigurationSettings.AppSettings["ConnectionString"];
                    conn.ConnectionString = connectString;
           //new code ends

        conn.Open();
        string setapprole = "sp_setapprole 'my_app' , 'app_pass' ";
        SqlCommand cmd_app = new SqlCommand(setapprole, conn);
        SqlDataReader approle_reader = cmd_app.ExecuteReader();
        approle_reader.Close();

        Form2 f2 = new Form2();
        f2.Show();
    }

}

-------------------------------- FORM2.CS ------------------------------

public partial class Form2 : Form
{
   //how to connect to the database, 
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {  
        string query = "create database new_db";
         //I WANT TO USE the conn object here, 
          //& want the connection to use the application role
         // which was set in Form1.cs 
        SqlCommand cmd = new SqlCommand(query, conn); 
        SqlDataReader createdb = cmd.ExecuteReader();

    }
}

--------------- EDITED------------------------------------

мой файл app.config:

`xml version =" 1.0 "кодировка =" utf-8 "

конфигурация

appSettings add key = "ApplicationTitle" value = "Настройка базы данных, таблиц и разрешений" add key = "ConnectionString" value = "Сервер = localhost; Trusted_Connection = true" appSettings

конфигурация

1 Ответ

1 голос
/ 25 февраля 2011

Используйте SqlConnectionStringBuilder, чтобы изменить параметры соединения, а затем открыть новое соединение с БД.

РЕДАКТИРОВАТЬ

public partial class Form1 : Form
    {
        SqlConnection conn = new SqlConnection("Data Source=TODO;Initial Catalog=TODO;Integrated Security=True");

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (SqlCommand command = new SqlCommand("sp_setapprole 'my_app' , 'app_pass' ", conn))
            {
                command.CommandType = CommandType.Text;
                conn.Open();
                command.ExecuteNonQuery();
            }
            // The application role is set and remains active until the user disconnects

            Form2 f2 = new Form2(conn);
            f2.Show();
        }
    }

    public partial class Form2 : Form
    {
        SqlConnection conn = null;
        //how to connect to the database, 
        public Form2(SqlConnection conn)
        {
            InitializeComponent();
            this.conn = conn;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                using (SqlCommand command = new SqlCommand("create database new_db", conn))
                {
                    command.CommandType = CommandType.Text;
                    command.ExecuteNonQuery();
                }
            }
            finally
            {
                // Important to close the DB connection (at which point the approle becomes inactive)
                conn.Close();
            }

        }
    }
...