asp.net 列“title”不属于表 Table,实际上“title”字段是存在的。

thsurvivor 2012-06-07 03:43:48
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)



我遇到的困难是:
资料是找到了不少,但是不知道这个方向是否正确,以及就是正确,我对并发了解不多,不知道代码从何处下手写,
如果哪位高手,对这方面了解的话,请多多指教,谢谢!!

...全文
481 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
thsurvivor 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
Entity entity = new Entity();

entity.Title = reader["title"];


在看看数据库和表名
[/Quote]

SQL放在数据库都可以执行OK的,这个真的不是‘数据库表名或字段不存在的原因’。


我在提问的时候详细说明了:
异常信息:
异常类型: ArgumentException
异常消息: 列“title”不属于表 Table。

异常消息:有时候是列‘xxxxx’不属于表‘xxxx’,一会儿报这张表的,一会儿又报另外一张表,不是固定的。如果出现这样的错误,只要重新按F5刷新下,又好了。
myl_top 2012-06-08
  • 打赏
  • 举报
回复
Entity entity = new Entity();

entity.Title = reader["title"];


在看看数据库和表名
myl_top 2012-06-08
  • 打赏
  • 举报
回复
查看你的数据库或表明是否正确
thsurvivor 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
我还真没这么干过Entity entity = new Entity(reader);


这样试试 entity.Title = reader("title");
[/Quote]

其实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();

}
}


跟你含义是差不多的额。。
尼古拉特斯拉 2012-06-07
  • 打赏
  • 举报
回复
title改成[title]
jakey188 2012-06-07
  • 打赏
  • 举报
回复
跟正下 entity.Title = reader["title"];
jakey188 2012-06-07
  • 打赏
  • 举报
回复
我还真没这么干过Entity entity = new Entity(reader);


这样试试 entity.Title = reader("title");

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧