我在C#代码中使用SqlDependency
来警告我的应用程序,当数据库中的某一行中的特定列值发生更改时。我可以使用内联SQL实现它。
我想用存储过程替换它但由于某种原因代码没有执行存储过程。我从我的应用程序中粘贴了几行代码。请让我知道如何修改它,以便我可以使用过程调用替换内联SQL以实现相同的目的。
var con = new SqlConnection(ConnectionString);
SqlDependency.Stop(con.ConnectionString);
SqlDependency.Start(con.ConnectionString);
var connection = new SqlConnection(con.ConnectionString);
connection.Open();
try
{
using (var command = new SqlCommand("inlinesql", connection))
{
var dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
using (SqlDataReader rdr = command.ExecuteReader())
{
try
{
if (rdr.HasRows)
{
_autoEvent.WaitOne();
}
else
{
continue;
}
}
finally
{
rdr.Close();
}
}
}
}
finally
{
connection.Close();
SqlDependency.Stop(con.ConnectionString);
}
void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
dosomething();
}
答案 0 :(得分:2)
高于var dependency...
put:
command.CommandType = CommandType.StoredProcedure;
将inlinesql
替换为存储过程的名称。
答案 1 :(得分:0)
对我有用的示例代码:
using (var sqlConnection = new SqlConnection (_connectionString)) {
sqlConnection.Open ();
using (var sqlCommand = sqlConnection.CreateCommand ()) {
sqlCommand.Parameters.Clear ();
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
// YOUR STORED PROCEDURE NAME AND PARAMETERS SHOULD COME HERE
sqlCommand.CommandText = "sp_InsertData";
sqlCommand.Parameters.AddWithValue ("@Code", e.Entity.Symbol);
sqlCommand.Parameters.AddWithValue ("@Name", e.Entity.Name);
sqlCommand.Parameters.AddWithValue ("@Price", e.Entity.Price);
try {
var sqlDataInsert = sqlCommand.ExecuteNonQuery ();
} catch (Exception ex) {
MessageBox.Show (ex.Message, this.Title);
}
}
}