查询没有给出结果 c#
query not giving result c#
我已经在 SSMS 中像这样测试了这个查询
SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst,
SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast,
SUM(S_P_ttavail) % S_P_pack AS atb, CAST(SUM(S_P_ttavail * S_P_prate / S_P_pack) AS decimal(9, 2)) AS grs
FROM STOCK
WHERE (S_type <> 'phy') AND (Purchase_date BETWEEN '2014/1/25' AND '2015/12/25')
GROUP BY S_P_name, S_P_pack
它给了我想要的结果。但是当我用 C# 代码实现它时它不起作用。
这是我做的
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between "+fromDate.ToShortDateString()+" And "+Todate.ToShortDateString()+" GROUP BY S_P_name, S_P_pack", conn);
conn.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = 0;
dgv1Clossing.Rows.Insert(i);
dgv1Clossing.Rows[i].Cells["S_P_name"].Value = dr["S_P_name"].ToString();
dgv1Clossing.Rows[i].Cells["S_P_pack"].Value = dr["S_P_pack"].ToString();
dgv1Clossing.Rows[i].Cells["S_opn_strp"].Value = dr["ost"].ToString();
dgv1Clossing.Rows[i].Cells["S_opn_tabs"].Value = dr["otb"].ToString();
dgv1Clossing.Rows[i].Cells["S_pur_strp"].Value = dr["pst"].ToString();
dgv1Clossing.Rows[i].Cells["S_pur_tabs"].Value = dr["ptb"].ToString();
dgv1Clossing.Rows[i].Cells["S_sold_strp"].Value = dr["sst"].ToString();
dgv1Clossing.Rows[i].Cells["S_sold_tabs"].Value = dr["stb"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_strp"].Value = dr["ast"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_tabs"].Value = dr["atb"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_total"].Value = dr["grs"].ToString();
i++;
}
conn.Close();
调试时我发现这没有引发任何异常或错误。但它没有进入循环。 while(dr.read())
。我的 table 中有 3 个相关行,它们是 SSMS 的结果,但不是这个。
请帮助我知道我哪里出错了。
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between '"+fromDate.ToShortDateString()+"' And '"+Todate.ToShortDateString()+"' GROUP BY S_P_name, S_P_pack", conn);
放置此sqlcommmand 并对其进行测试。我在您丢失的日期之前和之后添加了 '
。
希望对你有帮助。
Edited
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between '" + fromDate.ToString("yyyyMMdd") +"' And '" + Todate.ToString("yyyyMMdd") +"' GROUP BY S_P_name, S_P_pack", conn);
尝试使用 SqlParameter Class。总是不鼓励在 C# 中直接向字符串查询插入参数。
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between @FromDate And @Todate GROUP BY S_P_name, S_P_pack", conn);
cmd.Parameters.Add(
"@FromDate", SqlDbType.DateTime).Value = fromDate;
cmd.Parameters.Add(
"@ToDate", SqlDbType.DateTime).Value = Todate;
我已经在 SSMS 中像这样测试了这个查询
SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst,
SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast,
SUM(S_P_ttavail) % S_P_pack AS atb, CAST(SUM(S_P_ttavail * S_P_prate / S_P_pack) AS decimal(9, 2)) AS grs
FROM STOCK
WHERE (S_type <> 'phy') AND (Purchase_date BETWEEN '2014/1/25' AND '2015/12/25')
GROUP BY S_P_name, S_P_pack
它给了我想要的结果。但是当我用 C# 代码实现它时它不起作用。
这是我做的
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between "+fromDate.ToShortDateString()+" And "+Todate.ToShortDateString()+" GROUP BY S_P_name, S_P_pack", conn);
conn.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = 0;
dgv1Clossing.Rows.Insert(i);
dgv1Clossing.Rows[i].Cells["S_P_name"].Value = dr["S_P_name"].ToString();
dgv1Clossing.Rows[i].Cells["S_P_pack"].Value = dr["S_P_pack"].ToString();
dgv1Clossing.Rows[i].Cells["S_opn_strp"].Value = dr["ost"].ToString();
dgv1Clossing.Rows[i].Cells["S_opn_tabs"].Value = dr["otb"].ToString();
dgv1Clossing.Rows[i].Cells["S_pur_strp"].Value = dr["pst"].ToString();
dgv1Clossing.Rows[i].Cells["S_pur_tabs"].Value = dr["ptb"].ToString();
dgv1Clossing.Rows[i].Cells["S_sold_strp"].Value = dr["sst"].ToString();
dgv1Clossing.Rows[i].Cells["S_sold_tabs"].Value = dr["stb"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_strp"].Value = dr["ast"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_tabs"].Value = dr["atb"].ToString();
dgv1Clossing.Rows[i].Cells["S_avail_total"].Value = dr["grs"].ToString();
i++;
}
conn.Close();
调试时我发现这没有引发任何异常或错误。但它没有进入循环。 while(dr.read())
。我的 table 中有 3 个相关行,它们是 SSMS 的结果,但不是这个。
请帮助我知道我哪里出错了。
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between '"+fromDate.ToShortDateString()+"' And '"+Todate.ToShortDateString()+"' GROUP BY S_P_name, S_P_pack", conn);
放置此sqlcommmand 并对其进行测试。我在您丢失的日期之前和之后添加了 '
。
希望对你有帮助。
Edited
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between '" + fromDate.ToString("yyyyMMdd") +"' And '" + Todate.ToString("yyyyMMdd") +"' GROUP BY S_P_name, S_P_pack", conn);
尝试使用 SqlParameter Class。总是不鼓励在 C# 中直接向字符串查询插入参数。
cmd = new SqlCommand("SELECT S_P_name, S_P_pack, FLOOR(SUM(S_P_ttoqty) / S_P_pack) AS ost, SUM(S_P_ttoqty) % S_P_pack AS otb, FLOOR(SUM(S_P_ttsold) / S_P_pack) AS sst, SUM(S_P_ttsold) % S_P_pack AS stb, FLOOR(SUM(S_P_ttqty) / S_P_pack) AS pst, SUM(S_P_ttqty) % S_P_pack AS ptb, FLOOR(SUM(S_P_ttavail) / S_P_pack) AS ast, SUM(S_P_ttavail) % S_P_pack AS atb, cast(SUM(S_P_ttavail*S_P_prate/S_P_pack)as decimal(9,2))AS grs FROM STOCK Where S_type<>'phy' AND Purchase_date between @FromDate And @Todate GROUP BY S_P_name, S_P_pack", conn);
cmd.Parameters.Add(
"@FromDate", SqlDbType.DateTime).Value = fromDate;
cmd.Parameters.Add(
"@ToDate", SqlDbType.DateTime).Value = Todate;