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,re 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)我遇到的困难是:
资料是找到了不少,但是不知道这个方向是否正确,以及就是正确,我对并发了解不多,不知道代码从何处下手写,
如果哪位高手,对这方面了解的话,请多多指教,谢谢!!
{
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,re 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)我遇到的困难是:
资料是找到了不少,但是不知道这个方向是否正确,以及就是正确,我对并发了解不多,不知道代码从何处下手写,
如果哪位高手,对这方面了解的话,请多多指教,谢谢!!
这样试试 entity.Title = reader("title");
其实Entity对象中构造函数里面取值方法是:Title1 = GetString("Title", reader);
/// <summary>
/// 得到字符型列的值
/// </summary>
/// <param name="colName"></param>
/// <param name="reader"></param>
/// <returns></returns>
public string GetString(string colName, IDataReader reader)
{
if (reader[colName] == null || string.IsNullOrEmpty(reader[colName]))
{
return string.Empty;
}
else
{
return reader[colName].ToString();
}
}
跟你含义是差不多的额。。
在看看数据库和表名
SQL放在数据库都可以执行OK的,这个真的不是‘数据库表名或字段不存在的原因’。
我在提问的时候详细说明了:
异常信息:
异常类型: ArgumentException
异常消息: 列“title”不属于表 Table。
异常消息:有时候是列‘xxxxx’不属于表‘xxxx’,一会儿报这张表的,一会儿又报另外一张表,不是固定的。如果出现这样的错误,只要重新按F5刷新下,又好了。