在c#中的一个crytal报告中显示2个表中的数据

时间:2017-07-31 14:02:26

标签: c# crystal-reports

我试图在水晶报告上显示一些数据。在编写代码之后,报告的发布部分显示良好,而接收部分仅显示所选范围内的第一个数据并重复多次。这是下面的代码

public DataSet itembincardreport(string date1, string date2, string 
itemcode)
    {
        SqlCommand cmd = new SqlCommand();
        SqlConnection con = null;
        Connection cs = new Connection();
        con = new SqlConnection(cs.DBcon);
        con.Open();
        DataSet ds = new DataSet();
        frmReport frm = new frmReport();


        string sql = "select * from ISSUED, RECEIVED WHERE 
 ISSUED.ITEMCODE=RECEIVED.ITEMCODE AND ISSUED.ITEMCODE = '" + itemcode + "' 
        AND RECEIVED.ITEMCODE = '" + itemcode + "' and ISSUED.TRANSDATE 
between '" + Convert.ToDateTime(date1) + "' and '" + 
Convert.ToDateTime(date2) + "' and RECEIVED.TRANSDATE between '" + 
Convert.ToDateTime(date1) + "' and '" + Convert.ToDateTime(date2) + "'";

        SqlDataAdapter dadbt = new SqlDataAdapter(sql, mycon.DBcon);
        dadbt.Fill(ds);
        dadbt.Dispose();
        return ds;
    }

1 个答案:

答案 0 :(得分:0)

问题的根本原因是查询。接收表和已发布的表是否有多个彼此匹配的行,我不能说(您需要发布一些比给出的屏幕截图更好的示例表数据)但是您在字符串中的查询应该写成:

string sql = 
  @"select * 
    from 
      ISSUED
      inner join
      RECEIVED
      on 
        ISSUED.ITEMCODE=RECEIVED.ITEMCODE -- this is probably the fault 
                                          -- try joining on ISSUEDID = RECEIVED instead??
    where
      ISSUED.ITEMCODE = @itemcode and
      ISSUED.TRANSDATE between @date1 and @date2 and
      RECEIVED.TRANSDATE between @date1 and @date2";

稍后在您的代码中,您应该致电:

var c = new SqlCommand();
c.CommandText = sql;
c.Connection mycon;
c.Parameters.AddWithValue("@itemcode", itemcode);
c.Parameters.AddWithValue("@date1", Convert.ToDateTime(date1)); //you should make the method argument a DateTime
c.Parameters.AddWithValue("@date2", Convert.ToDateTime(date2)); //you should make the method argument a DateTime

SqlDataAdapter dadbt = new SqlDataAdapter(c);

如何正确地使用参数进行数据库查询..现在是否存在重复行完全取决于您的表数据*,但至少您的SQL不受黑客放置项目代码{{ 1}}进入并搞砸你的世界

*如果您需要帮助,请发布一些详细的示例数据,我将编辑此答案。看一下SQLFiddle.com