union all没作用。。。

bulls5988 2012-03-19 09:56:34

只显示了两个SQL的前半句,union all后面的就都没有显示了。


这个DATAGRIDVIEW的填充源是两个sql查询合并的,合并前SQL语句是没问题的,现在为什么union all没起作用?

  
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt = new DataTable();
DateTime d_start = fee_date_starts.Value.Date;
DateTime d_end = fee_date_ends.Value.Date.AddDays(1);

sql_str = "select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_end,108) between '09:00:01' and '10:00:00'
and car_fee_flag = 2"+
"union all select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_end,108) between '10:00:01' and
'11:00:00' and car_fee_flag = 2";
find_do = new SqlDataAdapter(sql_str, conn);
find_do.Fill(dt1);

sql_in = "select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '09:00:01'
and '10:00:00'"+
"union all select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '10:00:01'
and '11:00:00'";
find_do = new SqlDataAdapter(sql_in, conn);
find_do.Fill(dt2);

dt.Columns.Add("dt1", typeof(Int32));
dt.Columns.Add("dt2", typeof(Int32));
DataRow dr = dt.NewRow();
dr[0] = dt1.Rows[0][0];
dr[1] = dt2.Rows[0][0];
dt.Rows.Add(dr);
d_report.DataSource = dt;
...全文
569 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen870201 2012-03-19
  • 打赏
  • 举报
回复
查询分析器先试试SQL
bdmh 2012-03-19
  • 打赏
  • 举报
回复
union前面没有空格,没报错吗?,你发sql放到数据库中试试
bulls5988 2012-03-19
  • 打赏
  • 举报
回复
谁帮忙回一下,沉了。。。
bulls5988 2012-03-19
  • 打赏
  • 举报
回复
就算结果数一样,最少应该是2行2列吧 。。。

现在显示1行2列
bulls5988 2012-03-19
  • 打赏
  • 举报
回复
哥们,我感觉不是SQL的问题呀。我改成下面这种都不行;

sql_str = "select count(car_fee_id) from car_park_fee union all select count(car_fee_id) from car_park_fee " ;
find_do = new SqlDataAdapter(sql_str, conn);
find_do.Fill(dt1);
sql_in = "select count(car_fee_id) from car_park_fee union all select count(car_fee_id) from car_park_fee ";find_do = new SqlDataAdapter(sql_in, conn);
find_do.Fill(dt2);
dt.Columns.Add("dt1", typeof(Int32));
dt.Columns.Add("dt2", typeof(Int32));
DataRow dr = dt.NewRow();
dr[0] = dt1.Rows[0][0];
dr[1] = dt2.Rows[0][0];
dt.Rows.Add(dr);
d_report.DataSource = dt;
EnForGrass 2012-03-19
  • 打赏
  • 举报
回复
sql_str = "select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_end,108) between '09:00:01' and '10:00:00' and
car_fee_flag = 2 union all select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_end,108)
between '10:00:01' and '11:00:00' and car_fee_flag = 2";
你可以调试一下,看sql_str是否正确(和你在查询分析器中的是否一样)
bulls5988 2012-03-19
  • 打赏
  • 举报
回复
这回没有 + 拼接还是一样呀。不是空格的问题吧


string sql_str = "";
string sql_in = "";
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt = new DataTable();
DateTime d_start = fee_date_starts.Value.Date;
DateTime d_end = fee_date_ends.Value.Date.AddDays(1);
if (DateTime.Compare(d_end, d_start) > 0)
{
SqlConnection conn = new SqlConnection(fee_conn.sql_conn());
try
{
sql_str = "select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_end,108) between '09:00:01' and '10:00:00' and
car_fee_flag = 2 union all select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_end,108)
between '10:00:01' and '11:00:00' and car_fee_flag = 2";
find_do = new SqlDataAdapter(sql_str, conn);
find_do.Fill(dt1);

sql_in = "select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '09:00:01' and '10:00:00' union all select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '10:00:01' and '11:00:00'";
find_do = new SqlDataAdapter(sql_in, conn);
find_do.Fill(dt2);
dt.Columns.Add("dt1", typeof(Int32));
dt.Columns.Add("dt2", typeof(Int32));
DataRow dr = dt.NewRow();
dr[0] = dt1.Rows[0][0];
dr[1] = dt2.Rows[0][0];
dt.Rows.Add(dr);
d_report.DataSource = dt;
}
catch (System.Exception sqler)
{
MessageBox.Show("数据库不存在或用户名密码错误);
return;
}

d_report.Columns[0].HeaderText = "离开车辆数(辆)";
d_report.Columns[1].HeaderText = "进入车辆数(辆)";
d_report.RowHeadersWidth = 200;
d_report.Rows[0].HeaderCell.Value = "09:00-10:00";
d_report.Rows[1].HeaderCell.Value = "10:00-11:00";
}

bulls5988 2012-03-19
  • 打赏
  • 举报
回复
这回没有 + 拼接还是一样呀。不是空格的问题吧

string sql_str = "";
string sql_in = "";
DataTable dt1 = new DataTable();
DataTable dt2 = new DataTable();
DataTable dt = new DataTable();
DateTime d_start = fee_date_starts.Value.Date;
DateTime d_end = fee_date_ends.Value.Date.AddDays(1);
if (DateTime.Compare(d_end, d_start) > 0)
{
SqlConnection conn = new SqlConnection(fee_conn.sql_conn());
try
{
sql_str = "select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_end,108) between '09:00:01' and '10:00:00' and
car_fee_flag = 2 union all select count(car_fee_id) from car_park_fee where car_fee_end between '" + d_start + "'
and '" + d_end + "' and convert(varchar(5),car_fee_end,108)
between '10:00:01' and '11:00:00' and car_fee_flag = 2";
find_do = new SqlDataAdapter(sql_str, conn);
find_do.Fill(dt1);

sql_in = "select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '09:00:01' and '10:00:00' union all select count(car_fee_id) from car_park_fee where car_fee_start between '" + d_start + "' and '" + d_end + "' and convert(varchar(5),car_fee_start,108) between '10:00:01' and '11:00:00'";
find_do = new SqlDataAdapter(sql_in, conn);
find_do.Fill(dt2);
dt.Columns.Add("dt1", typeof(Int32));
dt.Columns.Add("dt2", typeof(Int32));
DataRow dr = dt.NewRow();
dr[0] = dt1.Rows[0][0];
dr[1] = dt2.Rows[0][0];
dt.Rows.Add(dr);
d_report.DataSource = dt;
}
catch (System.Exception sqler)
{
MessageBox.Show("数据库不存在或用户名密码错误);
return;
}

d_report.Columns[0].HeaderText = "离开车辆数(辆)";
d_report.Columns[1].HeaderText = "进入车辆数(辆)";
d_report.RowHeadersWidth = 200;
d_report.Rows[0].HeaderCell.Value = "09:00-10:00";
d_report.Rows[1].HeaderCell.Value = "10:00-11:00";
}
色拉油 2012-03-19
  • 打赏
  • 举报
回复
我看是[Quote=引用 5 楼 wellbeingzhang 的回复:]

= 2"+
"union all
2跟union好像没有空格。
[/Quote]
觉悟之时 2012-03-19
  • 打赏
  • 举报
回复
= 2"+
"union all
2跟union好像没有空格。
bulls5988 2012-03-19
  • 打赏
  • 举报
回复
查询分析器是没问题的

select count(car_fee_id) from car_park_fee where car_fee_start between '2012-3-19' and '2012-3-20' and convert(varchar(5),car_fee_start,108) between '09:00:01' and '10:00:00' union all select count(car_fee_id) from car_park_fee where car_fee_start between '2012-3-19' and '2012-3-20' and convert(varchar(5),car_fee_start,108) between '10:00:01' and '11:00:00'

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧