none
【ASP.NET】偶尔出现错误 “列不属于表” RRS feed

  • 问题

  • 不知道什么原因造成的,偶尔出现“列不属于表”错误,也仔细检查了该字段,表中也是存在的。真是莫名奇妙!

    截图如下:

     

    有人知道这是什么原因引起的么?

    2010年7月16日 17:04

答案

  • 看起来你的Table adapter和DataSet都没有dispose啊。你在SQL Server上开profilter,在出问题的时候看看查询返回的是什么。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Mog Liang 2010年7月26日 7:02
    2010年7月17日 2:28
    版主

全部回复

  • GetDataSet怎么写的?听起来像多线程同步问题,你的ds在多个线程里面访问么?

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年7月16日 21:47
    版主
  • GetDataSet怎么写的?听起来像多线程同步问题,你的ds在多个线程里面访问么?

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    你好   

    GetDataSet方法如下:


        static public DataSet GetDataSet(string procName, CommandType txtType, string tbName)
        {
            SqlDataAdapter sda = GetDataAdapter(procName, txtType, null);
            DataSet ds = new DataSet();
            sda.Fill(ds, tbName);
            return ds;
        }

     

    不过这并不是多线程的,只是一个数据库操作的公共方法而已。你知道这是怎么回事么?网上有很多这样的问题,但都没有一个合理的解决方案。

    2010年7月17日 1:11
  • 看起来你的Table adapter和DataSet都没有dispose啊。你在SQL Server上开profilter,在出问题的时候看看查询返回的是什么。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    • 已标记为答案 Mog Liang 2010年7月26日 7:02
    2010年7月17日 2:28
    版主
  • 看起来你的Table adapter和DataSet都没有dispose啊。你在SQL Server上开profilter,在出问题的时候看看查询返回的是什么。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP


    不是的,我在这个方法所属的类文件已经继承了IDisposable接口,并实现了该接口的Dispose方法释放资源,并把GetDataSet方法放到了uisng()中了

    应该不是这个问题,只是偶尔出现。以前的项目也适用过,却没有发现类似的问题,很诡异

    2010年7月17日 4:07
  • 所以让你开profiler……看看出错时返回的数据都是什么

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年7月17日 13:34
    版主
  • 所以让你开profiler……看看出错时返回的数据都是什么

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    好的,那我试试。感谢!
    2010年7月19日 1:33
  • 小弟問個問題,

    您的 con 物件是怎麼丟進 OperatDB.GetDataSet() 方法裡面的...?

    該不會是放在 OperatDB 類別裡面當作靜態屬性吧???



    • 已编辑 DK. Da 2012年6月10日 1:06
    2010年7月26日 7:13
  • 小弟問個問題,

    您的 con 物件是怎麼丟進 OperatDB.GetDataSet() 方法裡面的...?

    該不會是放在 OperatDB 類別裡面當作靜態屬性吧???


    小中中的學習筆記
    不是静态属性,但是是静态方法。
    2010年7月26日 8:01
  • 抱歉可能問得不夠清楚,

    小弟問的是 using (SqlConnection con = OperateDB.GetConnection()) 裡面這個 con 物件......

    您在 OperateDB 類別裡面是怎麼使用他的......???

     

    因為 OperateDB.GetDataSet() 裡面應該需要用到 con 物件,

    如果您不是在 OperateDB 類別裡面做了特殊處理,就是在 Site() 這個方法所在類別裡面做了處理,

    這樣很有可能造成 con 物件產出多個 DataReader,很容易發生 mapping 錯誤的問題......



    • 已编辑 DK. Da 2012年6月10日 1:06
    2010年7月26日 8:57
  • 抱歉可能問得不夠清楚,

    小弟問的是 using (SqlConnection con = OperateDB.GetConnection()) 裡面這個 con 物件......

    您在 OperateDB 類別裡面是怎麼使用他的......???

     

    因為 OperateDB.GetDataSet() 裡面應該需要用到 con 物件,

    如果您不是在 OperateDB 類別裡面做了特殊處理,就是在 Site() 這個方法所在類別裡面做了處理,

    這樣很有可能造成 con 物件產出多個 DataReader,很容易發生 mapping 錯誤的問題......


    小中中的學習筆記

     static public SqlConnection GetConnection()
        {
           
            try
            {
                con = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
            }
            catch (System.Data.SqlClient.SqlException mye)
            {
                throw mye;
            }

            return con;
        }

    从你的分析上看,似乎还真能推敲出点问题来。让我再想想

    2010年7月26日 13:18
  • Hello jinwb1982,

    問題解決了嗎~~~?



    • 已编辑 DK. Da 2012年6月10日 1:06
    2010年8月5日 1:19
  • Hello jinwb1982,

    問題解決了嗎~~~?


    小中中的學習筆記

    这个错误不是经常发生,可以说还没有解决,不过最近没有发生此问题。感谢你的关注
    2010年8月6日 9:27
  • 这个问题相当的诡异,我也被困扰很久了
    2010年10月12日 8:31
  • static public DataSet GetDataSet(string procName, CommandType txtType, string tbName)
        {
            SqlDataAdapter sda = GetDataAdapter(procName, txtType, null);
            DataSet ds = new DataSet();
            sda.Fill(ds, tbName);
            return ds;
        }

     

    Fill的方法只保留ds参数

    即DataAdapter.Fill(ds);

    后面的是tbname不是强类型,而是根据string 进行判断的,所以在默认的dbo.table是不同的

    • 已建议为答案 gsralex 2010年10月12日 14:11
    2010年10月12日 14:09