我遇到一个奇怪的问题!
当数据库 里面有1条数据的时候!SqlHelp 填充 DataTable , 返回的 DataTable 会是 NULL !
而且用 COUNT 方法,得到的记录行数也是 0 条!但是  我用 SQL2000的事件探查器 到的SQL在 查询分析器里面 可以查出一条数据!
而且 当有1条以上的时候 都能正常显示!这是为什么啊?下面是源代码:using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;namespace EnterpriseSms.DAL
{
    public class TakeFunds
    {
        /// <summary>
        /// 查询取款明细
        /// </summary>
        readonly public static string SQL_SEL_TAKEFUNDS = "SELECT SYS_user.UserID,UserName,CardNo, DeptName, KindName,Take_Funds,Balance,Take_Date, UseTimes,Sps_TakeFunds.OpeName FROM Sys_User INNER JOIN Sps_UserInfo ON Sys_User.UserID = Sps_UserInfo.UserID INNER JOIN Sps_CardKind ON Sps_UserInfo.KindID = Sps_CardKind.KindID INNER JOIN Sys_Depart ON Sys_User.DeptID = Sys_Depart.DeptID INNER JOIN Sps_TakeFunds ON Sys_User.UserID = Sps_TakeFunds.UserID WHERE Sys_User.UserID = @1 AND Sps_TakeFunds.Take_Date >= @1 AND Sps_TakeFunds.Take_Date <= @2 order by Take_Date DESC ";
        /// <summary>
        /// 查询取款明细总行数
        /// </summary>
        readonly public static string SQL_SEL_TAKEFUNDS_COUNT = "SELECT COUNT(*) FROM Sys_User INNER JOIN Sps_UserInfo ON Sys_User.UserID = Sps_UserInfo.UserID INNER JOIN Sps_CardKind ON Sps_UserInfo.KindID = Sps_CardKind.KindID INNER JOIN Sys_Depart ON Sys_User.DeptID = Sys_Depart.DeptID INNER JOIN Sps_TakeFunds ON Sys_User.UserID = Sps_TakeFunds.UserID WHERE Sys_User.UserID = @1 AND Sps_TakeFunds.Take_Date >= @1 AND Sps_TakeFunds.Take_Date <= @2 ";
        DataTable dt;
        /// <summary>
        /// 取款明细查询
        /// </summary>
        ///  <param name="userID">用户编号</param>
        /// <param name="beginTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns>取款明细</returns>
        public DataTable GetTakeFundsALL(string userID, string beginTime, string endTime)
        {
            dt = new DataTable();
            SqlHelper.FillDataTable(
                SQL_SEL_TAKEFUNDS,
                dt,
                new SqlParameter("@0", userID),
                new SqlParameter("@1", beginTime),
                new SqlParameter("@2", endTime)
            );
            return dt;
        }        /// <summary>
        /// 取款明细记录数查询
        /// </summary>
        ///  <param name="userID">用户编号</param>
        /// <param name="beginTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns>总行数</returns>
        public int GetTakeFundsConut(string userID, string beginTime, string endTime)
        {
            return (int) SqlHelper.ExecuteScalar(
                SQL_SEL_TAKEFUNDS_COUNT,
                new SqlParameter("@0", userID),
                new SqlParameter("@1", beginTime),
                new SqlParameter("@2", endTime)
            );
        }
    }
}

解决方案 »

  1.   


    设置过了哦 直接把 查询条件 去掉,然后让数据库里存在一条记录的时候,就显示不出来!
    非要1条以上的记录才显示!真是太奇怪了!
    SQL2000的事件探查器 直接得到的 执行的 SQL, 在 查询分析器里面 可以查出一条数据!
      

  2.   

    呵呵  你遇到个灵异事件。你先不要使用联合查询,就查一个表里面只有一个数据的,例如:select * from Sys_User和select Count(*) from Sys_User
    看看能不能显示。
    如果能显示,就敢确定是联合语句的错误。
    如果不显示而查询分析器显示就是你的代码问题了。
      

  3.   

    你的SQL_SEL_TAKEFUNDS语句中 有2个'@1'哦  没有'@0'
      

  4.   

    调试SQL语句 看是不是查询语句错了
    Sys_User.UserID = @1 改为Sys_User.UserID = @0 看看