首页 新闻 搜索 专区 学院

查询数据的错误问题,调试时没有发现任何提示错误

0
悬赏园豆:5 [待解决问题]

在查询打开一个查询数据的页面时,经常会出现如下错误,然后重新刷新一下又可以正常获得数据(即使是在没有其他用户使用的情况下也会出现),发现就是在查询这个表时才会出现这样的错误,其他表还没有发现错误。调试时没有发现任何提示错误。

System.Exception: 数据查询失败!ExecuteTable查询语句为: SELECT TOP 10 * FROM (select * from [topicview] where t_id>0 and c_name='Flash课外知识' and t_enable=1) AS T ORDER BY t_addtime desc ---> System.NullReferenceException: Object reference not set to an instance of an object. at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i) at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values) at System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values) at System.Data.ProviderBase.SchemaMapping.LoadDataRow() at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping) at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) at OLC.DAL.Database.ExecuteTable(CommandType cmdType, String cmdText, SqlParameter[] commandParameters) --- End of inner exception stack trace

 ExcuteTable语句如下:

        /// <summary>
        /// 获得一个表名为result数据表
        /// </summary>
        /// <param name="cmdType">CommandType枚举</param>
        /// <param name="cmdText">命令字符串</param>
        /// <param name="commandParameters">命令参数</param>
        /// <returns>一个表名为Result的DataTable </returns>
        public DataTable ExecuteTable(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
        {
            DataTable result = new DataTable();
            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandTimeout = 60;
                PrepareCommand(cmd,cmdType, cmdText, commandParameters);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(result);
            }
            catch (Exception ex)
            {
                throw new Exception("数据查询失败!ExecuteTable查询语句为:" + cmdText, ex);
            }
            return result;
        }
过期的风子的主页 过期的风子 | 初学一级 | 园豆:148
提问于:2013-05-28 07:57
< >
分享
所有回答(5)
0
PrepareCommand?
Yu | 园豆:12950 (专家六级) | 2013-05-28 08:36
0
Object reference not set to an instance of an object
滴答的雨 | 园豆:3690 (老鸟四级) | 2013-05-28 09:22
0
NullReferenceException  未将对象应用到实例,调试一下,看看哪个引用对象为null
chenping2008 | 园豆:9836 (大侠五级) | 2013-05-28 10:12
0

我怎么没有发现SqlConnection对象呢?

我一般都是这样写的。

        public List<Iw_UserEntity> GetList(string sql)
        {

            List<Iw_UserEntity> item = new List<Iw_UserEntity>();
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    DataTable dt = new DataTable();
                    SqlDataAdapter da = new SqlDataAdapter(com);
                    da.Fill(dt);

                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            DataRow dr = dt.Rows[i];
                            item.Add(new Iw_UserEntity
                            {
                                ID = Convert.ToInt32(dr["ID"]),
                                ba = Convert.ToString(dr["ba"]),
                                Names = Convert.ToString(dr["Names"]),
                                pass = Convert.ToString(dr["pass"]),
                                sex = Convert.ToInt32(dr["sex"]),
                                sexstr = Convert.ToInt32(dr["sex"]) == 1 ? "" : "",
                                age = DateTime.Now.Year - Convert.ToDateTime(dr["ba"]).Year
                            });
                        }
                    }
                }
            }
            return item;

        }
小明冥 | 园豆:222 (菜鸟二级) | 2013-05-28 15:38

SqlConnection这个肯定是要有的。数据查询中,其他页是没有问题的,只是在查这一页的时候才会出现这样的错误

支持(0) 反对(0) 过期的风子 | 园豆:148 (初学一级) | 2013-05-28 16:20

@过期的风子: 

你的错误主要是 System.NullReferenceException,你进入调试模式一下子就可以发现那个对象为空啦。

        你这一个是公共的方法吧!

 那样你就检查一下你传递进来的参数

支持(0) 反对(0) 小明冥 | 园豆:222 (菜鸟二级) | 2013-05-28 16:25
0

不用 Adaptor.Fill 换成 DataReader 试试吧。  Fill有时会有类型转换的错误。 

gunsmoke | 园豆:3592 (老鸟四级) | 2013-05-30 08:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册