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();
}
이 코드는 로컬 데이터베이스에서 작동됩니다. 내 질문은 왜 데이터베이스가 서버에있을 때 작동하지 않는 것입니다. 이 코드는 서버에서 실행하면, 나는 (작업 할 때 로그인하지 못했습니다. sqldependency
이
"사용자가 로그인하지 못했습니다")이 오류 메시지가 표시됩니다. 그러나이 종속성 코드 블록을 제거 할 때 작동합니다. 따라서 ConnectionString과 SQL 쿼리는 문제가 아닙니다. 나는 ConnectionString을 논스톱
작업 및 e.Info 값이 유효하지 않습니다. 도와주세요, 제발.에
'persist security info=True'
을 추가 "MessageBox.Show ("데이터 변경합니다. "+ e.Info.ToString())"
나는 이전에 SqlDependency를 사용한 적이 없지만 https://stackoverflow.com/questions/2730798/sqldependency-thread의 링크에 따라 별도의 스레드에서 Change 이벤트를 발생시키고 windows GUI 응용 프로그램이 매우 이상한 일들이 일어나서 비 UI 스레드가 메시지 상자를 만들게됩니다. 이건 좋지 않아. 데이터베이스의 변경 사항에 즉각적으로 반응하려고합니까? 캐시 또는 다른 것을 새로 고치는 것입니까? 원하는 것을 성취 할 수있는 훨씬 간단한 방법이있을 수 있습니다. – GPW