我在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 没有被解雇。
答案 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();
}