自从用了sqlHelper后就时不时的出现这个问题,想来想去是不是SQL缓存了(个人理解),于是,修改了sqlHelper类,增加了一个方法和几句代码
Code
//增加了一个属性,把原本全过程传递参数改为对象传递
public SqlParameter[] Parameters
{
set
{
parameters = value;
}
get
{
return parameters;
}
}
//增加了一个属性,把原本全过程传递参数改为对象传递
public SqlParameter[] Parameters
{
set
{
parameters = value;
}
get
{
return parameters;
}
}
//继承IDisponse接口,实现了IDisponse()方法,将Parameters设置为null
public void Dispose()
{
parameters = null;
commandText = null;
conntctionString = null;
}
public void Dispose()
{
parameters = null;
commandText = null;
conntctionString = null;
}
//完成SQL后将Parameters清除还不够,要设置为空,错误后也要设置为空,因为是先设置好参数,才开始查询,就算查询失败,参数还是被传递进去了
public SqlDataReader ExecuteReader()
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(conntctionString);
try
{
PrepareCommand(cmd, conn, null, commandType, commandText, parameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
cmd.Dispose();
parameters = null;//设置参数为null
return rdr;
}
catch
{
conn.Close();
this.Dispose();//清除参数
throw;
}
}
public SqlDataReader ExecuteReader()
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(conntctionString);
try
{
PrepareCommand(cmd, conn, null, commandType, commandText, parameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
cmd.Dispose();
parameters = null;//设置参数为null
return rdr;
}
catch
{
conn.Close();
this.Dispose();//清除参数
throw;
}
}
本来这个样子好了很多,可是偶尔还是会,例如数据库出错,下次打开就会错误,估计就是SQL或者ado.net把参数或者对象缓存了
//在构造函数里面将parameters设置为null
public MSSQLHelper()
{
parameters = null;
}
public MSSQLHelper()
{
parameters = null;
}
如此折腾了一翻,暂时没问题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述