如何使用C#中的类型化数据集激活应用程序角色?

时间:2015-04-23 06:08:19

标签: c# sql-server-2012-express

我在Windows C#2013项目中工作,该项目有一个SQL Server 2012 Express数据库,我创建了3个应用程序角色,我在项目中使用了类型化数据集,我在项目中搜索激活应用程序角色的方法。

我找到了一些信息,但没有完整的答案,我制作了一个代码,但它没有用,因为事件 Connection_StateChange 没有触发,这里是类 Class1中的代码在我的项目中我把这段代码:

public string rl, rlPss;
//rl, rlPss are variables contain role name and password.

public void SetAppRole(SqlConnection ta)
{
    if (ta.State==ConnectionState.Open)
    {
        ta.Close();
    }
    ta.Open();

    ta.StateChange += Connection_StateChange;
}

void Connection_StateChange(object sender, StateChangeEventArgs e)
{
    if (e.OriginalState==System.Data.ConnectionState.Closed && e.CurrentState==System.Data.ConnectionState.Open)
    {
        System.Data.SqlClient.SqlCommand scm = new SqlCommand();
        scm.Connection = (SqlConnection)sender;
        scm.CommandText = "EXEC sp_setAppRole '" + rl + "' , '" + rlPss + "'";
        scm.ExecuteNonQuery();
    }
}

btnlogin下登录时,我输入了以下代码:

cl.SetAppRole((System.Data.SqlClient.SqlConnection)tableAdapterManager.Connection);

MDIParent1 md = new MDIParent1();
md.Show();

我将角色名称和密码传递给 rl,rlPss。

我跟着执行了这段代码,发现事件 Connection_StateChange 没有被解雇。

1 个答案:

答案 0 :(得分:0)

在更改状态之前注册事件

public void SetAppRole(SqlConnection ta   public void SetAppRole(SqlConnection ta)
   {
       ta.StateChange += Connection_StateChange;
       if (ta.State==ConnectionState.Open)
       {
           ta.Close();
       }
       ta.Open();

   }