asp.net 列“title”不属于表 Table,实际上“title”字段是存在的。
public SqlDataReader ExecuteReader(string sqlCmd, params SqlParameter[] cmdParms)
{
try
{
this.Open();
cmd = new SqlCommand(sqlCmd, cn);
cmd.Parameters.AddRange(cmdParms);
sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
//throw new Exception(ex.Message);
LocalLog myLog = new LocalLog();
myLog.LogMe("Exception=" + ex.Message + "卐sqlCmd=" + sqlCmd);
myLog.Dispose();
}
finally
{
cmd.Dispose();
}
return sdr;
}
public override Entity GetByNumber(int key)
{
string Sql_GetById = @"select title,name,content,remark from QuestionInfo
where Id = @Id and ParentNode = '0'";
using (SqlDataReader reader = ReadDb.ExecuteReader(Sql_GetById, new SqlParameter("@Id", key)))
{
if (reader.Read())
{
Entity entity = new Entity(reader);
return entity;
}
return null;
}
}
异常信息:
异常类型: ArgumentException
异常消息: 列“title”不属于表 Table。
参考网上资料发生问题原因是:
1.并发时取数据出了问题,导致数据超时。
2.由于并发出错,影响了连接池,需要重新启动,导致读不到数据。
网上找到的解决办法:并发问题用线程锁 或者 lock锁。
对于并发数大的系统,要充分利用缓存机制和数据库连接池的机制。
否则,很容易出现数据库并发超标 或 读脏数据等情况。
而对于IIS,也容易出现连接数过大,内存占用超标等异常,
同时,要注意多并发对资源的竞争,恰当使用资源锁(lock)和数据库的读写锁(table lock row lock)
我遇到的困难是:
资料是找到了不少,但是不知道这个方向是否正确,以及就是正确,我对并发了解不多,不知道代码从何处下手写,
如果哪位高手,对这方面了解的话,请多多指教,谢谢!!