如何在修改数据时候获取到触发器返回的信息
怎么在修改数据时候获取到触发器返回的信息
当我执行修改时有一个触发器执行了但是执行时不给我结果,直接被catch掉了。 这样我获取不到信息,后面操作执行不了!
------解决方案--------------------
声明的SqlParameter数组,而在循环的内部,每一次执行ExecuteNonQuery都由该方法内部的IDbCommand.Parameters.Add(IDbDataParameter)将SqlParameter数组添加到IDbCommand的IDataParameterCollection中。而framework机制限制两个IDataParameterCollection指向同一个对象。虽然ExecuteNonQuery方法内部声明了一个IDbCommand的临时对象,理论上讲,这个包含了IDataParameterCollection的IDbCommand对象会在ExecuteNonQuery方法结束时从内存中释放。但是实际上可能是由于垃圾回收机制并没有将IDbCommand临时对象即时的回收,而且改对象绑定的Parameter集合也存在,就像一个DropDownList添加Item一样。这样在下一个循环执行的时候,会导致两个IDataParameterCollection指向同一个对象,此时出现问题。
要么:在每一次循环时,重新生成对象,new SqlParameter
要么每次都cmd.Parameters.Clear();
------解决方案--------------------
#region 查询(返回dt)2011.09.14 最新(Pr_Page) 分页
/// <summary>
/// 查询,(直接返回dt)重载
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="SearchSQL">查询sql</param>
/// <param name="GetFilds">要提取的字段</param>
/// <param name="MainKey">主键字段</param>
/// /// <param name="OrderFild">排序字段</param>
/// <param name="OrderType">排序方式,0,1</param>
/// <param name="SearchPageSize">条数</param>
/// <param name="SearchPageIndex">页数</param>
/// <param name="Dist">distinct:0/1</param>
/// <param name="Counts">总记录数</param>
/// <param name="PageCount">总页数</param>
/// <param name="SafetySure">安全级别:1-字符+攻击,2-字符(公开新增加信息到库时必用),3-攻击(查询,新加都可能用到,前台查询时必用),4-无</param>
/// <returns>DT</returns>
public DataTable Search_DT(string TableName, string SearchSQL, string GetFilds, string OrderFild, string PrimaryID, int OrderType, int SearchPageSize, int SearchPageIndex, string Dist, out int PageCount, out int Counts, int SafetySure)
{
PageCount = 0;
Counts = 0;
TableName = TableName.Trim();
SearchSQL = SearchSQL.Trim();
GetFilds = GetFilds.Trim();
OrderFild = OrderFild.Trim();
Dist = Dist.Trim();
//换危险字符
SearchSQL = classString.CheckSQL(SearchSQL, SafetySure);
if (SearchSQL == null)
{
return null;//查询字符中有危险字符,查询被取消
}
if (SearchSQL.Length < 1)
{
return null;
}
if (OrderType > 0) { OrderType = 1; }
else { OrderType = 0; }
if (SearchPageSize > 0) { }
else { SearchPageSize = 10; }
if (SearchPageIndex > 0) { }
else { SearchPageIndex = 1; }
if (Dist != "1")
{
Dist = "0";
当我执行修改时有一个触发器执行了但是执行时不给我结果,直接被catch掉了。 这样我获取不到信息,后面操作执行不了!
------解决方案--------------------
声明的SqlParameter数组,而在循环的内部,每一次执行ExecuteNonQuery都由该方法内部的IDbCommand.Parameters.Add(IDbDataParameter)将SqlParameter数组添加到IDbCommand的IDataParameterCollection中。而framework机制限制两个IDataParameterCollection指向同一个对象。虽然ExecuteNonQuery方法内部声明了一个IDbCommand的临时对象,理论上讲,这个包含了IDataParameterCollection的IDbCommand对象会在ExecuteNonQuery方法结束时从内存中释放。但是实际上可能是由于垃圾回收机制并没有将IDbCommand临时对象即时的回收,而且改对象绑定的Parameter集合也存在,就像一个DropDownList添加Item一样。这样在下一个循环执行的时候,会导致两个IDataParameterCollection指向同一个对象,此时出现问题。
要么:在每一次循环时,重新生成对象,new SqlParameter
要么每次都cmd.Parameters.Clear();
------解决方案--------------------
#region 查询(返回dt)2011.09.14 最新(Pr_Page) 分页
/// <summary>
/// 查询,(直接返回dt)重载
/// </summary>
/// <param name="TableName">表名</param>
/// <param name="SearchSQL">查询sql</param>
/// <param name="GetFilds">要提取的字段</param>
/// <param name="MainKey">主键字段</param>
/// /// <param name="OrderFild">排序字段</param>
/// <param name="OrderType">排序方式,0,1</param>
/// <param name="SearchPageSize">条数</param>
/// <param name="SearchPageIndex">页数</param>
/// <param name="Dist">distinct:0/1</param>
/// <param name="Counts">总记录数</param>
/// <param name="PageCount">总页数</param>
/// <param name="SafetySure">安全级别:1-字符+攻击,2-字符(公开新增加信息到库时必用),3-攻击(查询,新加都可能用到,前台查询时必用),4-无</param>
/// <returns>DT</returns>
public DataTable Search_DT(string TableName, string SearchSQL, string GetFilds, string OrderFild, string PrimaryID, int OrderType, int SearchPageSize, int SearchPageIndex, string Dist, out int PageCount, out int Counts, int SafetySure)
{
PageCount = 0;
Counts = 0;
TableName = TableName.Trim();
SearchSQL = SearchSQL.Trim();
GetFilds = GetFilds.Trim();
OrderFild = OrderFild.Trim();
Dist = Dist.Trim();
//换危险字符
SearchSQL = classString.CheckSQL(SearchSQL, SafetySure);
if (SearchSQL == null)
{
return null;//查询字符中有危险字符,查询被取消
}
if (SearchSQL.Length < 1)
{
return null;
}
if (OrderType > 0) { OrderType = 1; }
else { OrderType = 0; }
if (SearchPageSize > 0) { }
else { SearchPageSize = 10; }
if (SearchPageIndex > 0) { }
else { SearchPageIndex = 1; }
if (Dist != "1")
{
Dist = "0";