工作sqldependency时登录失败

时间:2017-11-10 13:15:59

标签: c# sql-server winforms user-permissions sqldependency

SqlConnection cn;
SqlCommand cmd;
SqlDependency dependency;
DataTable dt;
static string obj= string.Empty;
public Form1()
    {
        InitializeComponent();
        CheckForIllegalCrossThreadCalls = false;
        try
        {
            SqlClientPermission perm = new SqlClientPermission(System.Security.Permissions.PermissionState.Unrestricted);
            perm.Demand();
        }
        catch
        {
            throw new ApplicationException("No permission");
        }
    }

private void Form1_Load(object sender, EventArgs e)
    {
        MyMethod();
    }
void Dependency()
    {
        dependency = new SqlDependency(cmd);
        SqlDependency.Start(cn.ConnectionString);

        dependency.OnChange += Dependency_OnChange;
    }
void MyMethod()
    {
        try
        {
            cn= new SqlConnection("My Connection String");
            cmd = new SqlCommand("Select Column1,Column2,Column3,Column4,Column5 from [dbo].TableName where Column1=value", cn);
            if (cn.State == ConnectionState.Closed)
                cn.Open();
            Dependency();
            SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            while (dr.Read())
            {
                obj=dr["Column2"].ToString();
            }
            MessageBox.Show(obj);
            baglanti.Close();
            cmd.Dispose();
            dr.Close();
    }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        MessageBox.Show("Data Change. " + e.Info.ToString());
        dependency.OnChange -= Dependency_OnChange;
        MyMethod();
    }

此代码正在处理本地数据库。我的问题是,当数据库在服务器上时,为什么它不起作用。当此代码在服务器上运行时,我收到此错误消息(

  

“用户登录失败”

)。但是,当我删除依赖项代码块时,这是有效的。所以ConnectionString和sql查询不是问题。我将'persist security info=True'添加到connectionstring nonstop

  

“MessageBox.Show(”Data Change。“+ e.Info.ToString())”

工作和e.Info值无效。请帮帮我。

1 个答案:

答案 0 :(得分:0)

这与SqlDependency无关。您使用的连接字符串无效。永远不要传递从其他打开的连接读取为属性的连接字符串。传递用于打开连接的原始连接字符串。一个好的做法是将其存储为用户设置,将其加载到SqlConnectionStringBuilder,显式设置其他必需属性,然后阅读构建器。不要在表单设计器中设计连接字符串。

  

和e.Info值无效。

还要检查e.Sourcee.Type