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值无效。请帮帮我。
答案 0 :(得分:0)
这与SqlDependency
无关。您使用的连接字符串无效。永远不要传递从其他打开的连接读取为属性的连接字符串。传递用于打开连接的原始连接字符串。一个好的做法是将其存储为用户设置,将其加载到SqlConnectionStringBuilder
,显式设置其他必需属性,然后阅读构建器。不要在表单设计器中设计连接字符串。
和e.Info值无效。