我有一段代码
OleDbDataReader P_dr = G_SqlExecute.GetReader("SELECT TOP 1 结余日期 FROM 成品库存结余表 ORDER BY 结余日期 DESC");
      P_dr.Read();
            
    string dt = Convert.ToString(P_dr["结余日期"].ToString());P_Str_cmdtxt = "SELECT m.*,IIF(ISNULL(p.结余数量),0,p.结余数量)+IIF(ISNULL(I.入库数量),0,I.入库数量)-IIF(ISNULL(O.出库数量),0,O.出库数量) AS 库存数量,IIF(ISNULL(p.结余重量(吨)),0,p.结余重量(吨))+IIF(ISNULL(I.入库重量),0,I.入库重量)-IIF(ISNULL(O.出库重量),0,O.出库重量) AS 库存重量(吨) FROM (((";
            P_Str_cmdtxt += "SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品库存结余表 UNION SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品入库表 UNION SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品出库表) m ";
            P_Str_cmdtxt += " LEFT JOIN (SELECT 产品名称,包装规格,产品批号,仓库,结余数量,结余重量(吨) FROM 成品库存结余表) p ON m.产品名称=p.产品名称 AND m.包装规格=p.包装规格 AND m.产品批号=p.产品批号 AND m.仓库=p.仓库)";
            P_Str_cmdtxt += " LEFT JOIN (SELECT 产品名称,包装规格,产品批号,仓库,SUM(件数) AS 入库数量,SUM(总重量(吨)) AS 入库重量 FROM 成品入库表 WHERE 入库日期>#" + dt + "# GROUP BY 产品名称,包装规格,产品批号,仓库) I ON m.产品名称=I.产品名称 AND m.包装规格=I.包装规格 AND m.产品批号=I.产品批号 AND m.仓库=I.仓库)";
老是报错说当前上下文找不到dt,也不知道是为什么?
请大家给点意见,我的这个时间是没有控件显示的.
谢谢!

解决方案 »

  1.   

    这样看没问题。不妨改成这样试试:
    P_Str_cmdtxt += " LEFT JOIN (SELECT 产品名称,包装规格,产品批号,仓库,SUM(件数) AS 入库数量,SUM(总重量(吨)) AS 入库重量 FROM 成品入库表 WHERE 入库日期>#" + P_dr["结余日期"] + "# GROUP BY 产品名称,包装规格,产品批号,仓库) I ON m.产品名称=I.产品名称 AND m.包装规格=I.包装规格 AND m.产品批号=I.产品批号 AND m.仓库=I.仓库)";
      

  2.   

    string dt = Convert.ToString(P_dr["结余日期"].ToString());
    这么多tostring做什么呢
      

  3.   

    1楼,我改了,也不对,说当前上下文找不到P_dr
      

  4.   


    OleDbDataReader P_dr = G_SqlExecute.GetReader("SELECT TOP 1 结余日期 FROM 成品库存结余表 ORDER BY 结余日期 DESC");
    P_dr.Read();说明这段代码和你的 P_Str_cmdtxt = ... 没有放在一块。
      

  5.   

    Convert.ToString(P_dr["结余日期"].ToString());
    有一个ToString就已经变成字符串了,多了一个只会影响效率,没意义。。
      

  6.   

    OleDbDataReader P_dr = G_SqlExecute.GetReader("SELECT TOP 1 结余日期 FROM 成品库存结余表 ORDER BY 结余日期 DESC");
    P_dr.Read();上面和下面这两段代码要紧挨着,中间不要有其他代码试试:P_Str_cmdtxt = ...;
    P_Str_cmdtxt += ...;
    P_Str_cmdtxt += ... + P_dr["结余日期"] + ...;
      

  7.   

    肯定是你的dt是在一个大括号里边定义的
    然后你在大括号外边用了
    你应该这样
    string dt;
    {
    OleDbDataReader P_dr = G_SqlExecute.GetReader("SELECT TOP 1 结余日期 FROM 成品库存结余表 ORDER BY 结余日期 DESC");
      P_dr.Read();
        
       dt = P_dr["结余日期"].ToString();}
    P_Str_cmdtxt = "SELECT m.*,IIF(ISNULL(p.结余数量),0,p.结余数量)+IIF(ISNULL(I.入库数量),0,I.入库数量)-IIF(ISNULL(O.出库数量),0,O.出库数量) AS 库存数量,IIF(ISNULL(p.结余重量(吨)),0,p.结余重量(吨))+IIF(ISNULL(I.入库重量),0,I.入库重量)-IIF(ISNULL(O.出库重量),0,O.出库重量) AS 库存重量(吨) FROM (((";
      P_Str_cmdtxt += "SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品库存结余表 UNION SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品入库表 UNION SELECT 产品名称,包装规格,产品批号,仓库 FROM 成品出库表) m ";
      P_Str_cmdtxt += " LEFT JOIN (SELECT 产品名称,包装规格,产品批号,仓库,结余数量,结余重量(吨) FROM 成品库存结余表) p ON m.产品名称=p.产品名称 AND m.包装规格=p.包装规格 AND m.产品批号=p.产品批号 AND m.仓库=p.仓库)";
      P_Str_cmdtxt += " LEFT JOIN (SELECT 产品名称,包装规格,产品批号,仓库,SUM(件数) AS 入库数量,SUM(总重量(吨)) AS 入库重量 FROM 成品入库表 WHERE 入库日期>#" + dt + "# GROUP BY 产品名称,包装规格,产品批号,仓库) I ON m.产品名称=I.产品名称 AND m.包装规格=I.包装规格 AND m.产品批号=I.产品批号 AND m.仓库=I.仓库)";
    吧dt定义在外边
      

  8.   

    或者这样:
    OleDbDataReader P_dr = G_SqlExecute.GetReader(...);
    if (P_dr.Read())
    {
      P_Str_cmdtxt = ...;
      P_Str_cmdtxt += ...;
      P_Str_cmdtxt += ... + P_dr["结余日期"] + ...;
    }
      

  9.   

    谢谢大家,已经解决了,哈哈,就是多写了个ToString