2 u011019208 u011019208 于 2014.12.17 15:06 提问

使用C#和SQL查询数据库,查询到的与数据库不一致
            在Webservice的方法中查询得到的是{……,"NJL_StartTime":"2008","NJL_EndTime":"2008","NJL_BedNumbers":48,"NJL_DiningTableNum":48,"NJL_Revenue":48:……}
            在数据库中NJL_StartTime,NJL_EndTime这连个字段是不相同的值,NJL_BedNumbers,NJL_DiningTableNum,NJL_Revenue也是不相同的,不知道是什么原因
                  方法代码如下
        public NJLProject.Model.tb_NJL select(string NJL_ID,string NJL_Name)
    {

        StringBuilder strSQL= new StringBuilder();
        SqlDataReader sdr;
        if (NJL_ID!="")
        {
            strSQL.Append("select * from tb_NJL where NJL_ID=@NJL_ID");
            SqlParameter[] parameter =
        {
            new SqlParameter("@NJL_ID", SqlDbType.NVarChar,50),
         };
            parameter[0].Value = NJL_ID;
            sdr = DLL.SqlHelper.ExecuteReader(DLL.SqlHelper.sqlConnectionString, CommandType.Text, strSQL.ToString(), parameter);
        }
        else
        {
            strSQL.Append("select * from tb_NJL where NJL_Name=@NJL_Name");
            SqlParameter[] parameter =
        {
            new SqlParameter("@NJL_Name", SqlDbType.NVarChar,50),
         };
            parameter[0].Value = NJL_Name;
             sdr= DLL.SqlHelper.ExecuteReader(DLL.SqlHelper.sqlConnectionString, CommandType.Text, strSQL.ToString(), parameter);
        }


        NJLProject.Model.tb_NJL tb_NJL = new Model.tb_NJL();
        if (sdr.HasRows)
        {
            while (sdr.Read())
            {
                tb_NJL.NJL_ID = sdr[0].ToString();
                tb_NJL.NJL_Name = sdr[1].ToString();
                tb_NJL.NJL_Tel = sdr[2].ToString();
                tb_NJL.NJL_Linkman = sdr[4].ToString();
                tb_NJL.NJL_Street = sdr[5].ToString();
                tb_NJL.NJL_Adress = sdr[6].ToString();
                tb_NJL.NJL_BussinessEntity = sdr[7].ToString();
                tb_NJL.NJL_Level = Convert.ToInt32(sdr[8]);
                tb_NJL.NJL_Area = (float)Convert.ToDouble(sdr[9]);
                tb_NJL.NJL_StartTime = sdr[10].ToString();
                tb_NJL.NJL_EndTime = sdr[11].ToString();
                tb_NJL.NJL_BedNumbers = Convert.ToInt32(sdr[12]);
                tb_NJL.NJL_DiningTableNum = Convert.ToInt32(sdr[13]);
                tb_NJL.NJL_Revenue = (float)Convert.ToDouble(sdr[14]);
                tb_NJL.NJL_MainFood = sdr[15].ToString();
                tb_NJL.NJL_MainProject = sdr[16].ToString();
                tb_NJL.NJL_DevelopIdea = sdr[17].ToString();
                tb_NJL.NJL_Instruction = sdr[18].ToString();
                tb_NJL.NJL_Longitude = (float)Convert.ToDouble(sdr[19]);
                tb_NJL.NJL_Latitude = (float)Convert.ToDouble(sdr[20]);
            }
        }
        else
        {
            tb_NJL.NJL_ID = "未查询到结果";
            tb_NJL.NJL_Name = "未查询到结果";

        }
        return tb_NJL;
    }

4个回答

q107770540
q107770540   Ds   Rxr 2014.12.17 15:15

在这一步打上断点:
sdr= DLL.SqlHelper.ExecuteReader(DLL.SqlHelper.sqlConnectionString, CommandType.Text, strSQL.ToString(), parameter);

然后检查sqlConnectionString是不是指向你需要的数据库

再检查strSQL生成的SQL语句 在你的目标数据库上执行看看结果

u011019208
u011019208 谢谢回答。sqlConnectionString指向我需要的数据这肯定没错,因为其他的值是正确的,就是这几个值是和数据库里不相同的,SQL语句生成后我在数据库中查了一下,没错。真的是百思不得其解
接近 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.17 15:29

首先,web service本身要做单元测试,确保它查询的逻辑是正确的。
然后,你需要检查参数传进来对不对。
像你这样什么测试也不做,调试也不调,数据库里有什么我们也不知道,直接贴出一坨代码,就很难说了。

u011019208
u011019208 谢谢指教,我之前测试时将parameter[0].Value定死为某一个ID号,执行后也是这个问题,而且我做添加功能时,这些字段输入的全是不一样的值,传输到数据库中的是相同的,不知道您有没有遇到过这种情况
接近 3 年之前 回复
u011019208
u011019208   2014.12.18 17:19

不好意思,是我自己粗心了,我的实体类出错了

u011019208
u011019208   2014.12.18 17:21

顺便问一下,有没有好的实体类生成器,内容多了自己写容易出错

Csdn user default icon
上传中...
上传图片
插入图片