vb.net 2017使用复杂的SQL查询语句日期跨度过长的话查询无结果

wenoxy 2019-02-01 04:20:27
有没有哪位大神帮帮忙,帮我分析一下,我写了一段SQL查询语句,在vb.net中执行,如果时间跨度在2个月之内,查询有结果,但如果时间跨度过大,查询时间超过半分钟,则无任何查询结果。代码如下:
Dim sql As String
Dim dataAdapter As New SqlClient.SqlDataAdapter
Dim dst As New DataSet
Dim dt As New DataTable

Dim conn As New SqlClient.SqlConnection
Try

conn = New SqlClient.SqlConnection("Data Source=192.168.0.5;Initial Catalog=hycfb;User ID=sa;Password=gythymzjs;Integrated Security=False")
conn.Open()
sql = "select b.REGISTERSUBORGAN 门店编号,g.zjm 门店助记,g.mc 门店名称," & vbCr &
"b.hygs as 会员总个数 ,b.xzhygs 新增会员个数," & vbCr &
"a.hdhygs 活动会员个数," & vbCr &
"(case when isnull(b.hygs,0)=0 then 0 else round(100*isnull(a.hdhygs,0)/(cast(b.hygs as decimal(18,2))),2) end) 活动会员占比," & vbCr &
"b.T90wd 无销90天会员个数," & vbCr &
"b.lshys 会员流失个数," & vbCr &
"(case when isnull(b.t270cs,0)=0 then 0 else round(100*isnull(b.lshys,0)/(cast(b.t270cs as decimal(18,2))),2) end) 会员流失率," & vbCr &
"a.jshj 销售额,a.hy_jshj 会员销额," & vbCr &
"(case when isnull(a.jshj,0)=0 then 0 else round(100*(isnull(a.hy_jshj,0))/isnull(a.jshj,0),2) end ) 会员占总销比," & vbCr &
"a.hsmle 含税毛利,a.hy_hsmle 会员毛利," & vbCr &
"(case when isnull(a.hsmle,0)=0 then 0 else round(100*(isnull(a.hy_hsmle,0))/isnull(a.hsmle,0),2) end ) 会员占总毛利比," & vbCr &
"(case when isnull(a.jshj,0)=0 then 0 else round(100*(isnull(a.hsmle,0))/isnull(a.jshj,0),2) end ) 毛利率," & vbCr &
"(case when isnull(a.hy_jshj,0)=0 then 0 else round(100*(isnull(a.hy_hsmle,0))/isnull(a.hy_jshj,0),2) end ) 会员毛利率," & vbCr &
"a.khs 顾客数,a.hy_khs 会员客次," & vbCr &
"(case when isnull(a.khs,0)=0 then 0 else round(100*(isnull(a.hy_khs,0))/(cast(isnull(a.khs,0) as decimal(18,2))),2) end ) 会员占总顾客数比," & vbCr &
"(case when isnull(a.khs,0)=0 then 0 else round(isnull(a.jshj,0)/a.khs,2) end) 客单价 ," & vbCr &
"(case when isnull(a.dhs,0)=0 then 0 else round(isnull(a.jshj,0)/a.dhs,2) end) 客品单价 ," & vbCr &
"(case when isnull(a.khs,0)=0 then 0 else round(isnull(a.sl,0)/a.khs,2) end) 客品数量 ," & vbCr &
"(case when isnull(a.sl,0)=0 then 0 else round(isnull(a.jshj,0)/a.sl,2) end) 商品单价 ," & vbCr &
"(case when isnull(a.hy_khs,0)=0 then 0 else round(isnull(a.hy_jshj,0)/a.hy_khs,2) end) 会员客单价 ," & vbCr &
"(case when isnull(a.fhy_khs,0)=0 then 0 else round(isnull(a.fhy_jshj,0)/a.fhy_khs,2) end) 非会员客单价 ," & vbCr &
"(case when isnull(a.hy_dhs,0)=0 then 0 else round(isnull(a.hy_jshj,0)/a.hy_dhs,2) end) 会员客品单价 ," & vbCr &
"(case when isnull(a.fhy_dhs,0)=0 then 0 else round(isnull(a.fhy_jshj,0)/a.fhy_dhs,2) end) 非会员客品单价 ," & vbCr &
"(case when isnull(a.hy_khs,0)=0 then 0 else round(isnull(a.hy_sl,0)/a.hy_khs,2) end) 会员客品数量 ," & vbCr &
"(case when isnull(a.fhy_khs,0)=0 then 0 else round(isnull(a.fhy_sl,0)/a.fhy_khs,2) end) 非会员客品数量 ," & vbCr &
"(case when isnull(a.hy_sl,0)=0 then 0 else round(isnull(a.hy_jshj,0)/a.hy_sl,2) end) 会员商品单价 ," & vbCr &
"(case when isnull(a.fhy_sl,0)=0 then 0 else round(isnull(a.fhy_jshj,0)/a.fhy_sl,2) end) 非会员商品单价 ," & vbCr &
"(case when isnull(a.khs,0)=0 then 0 else round(isnull(a.gk_sku,0)/(cast(a.khs as decimal(18,2))),2) end) 客次SKU数," & vbCr &
" a.一线1类销售,a.一线2类销售,a.普通品种销售,a.主次推品销售额," & vbCr &
"(case when isnull(a.jshj,0)=0 then 0 else round(100*(isnull(a.主次推品销售额,0))/isnull(a.jshj,0),2) end ) 推品占总销比," & vbCr &
"a.会员主次推品销售额 as 会员推品销售," & vbCr &
"(case when isnull(a.hy_jshj,0)=0 then 0 else round(100*(isnull(a.会员主次推品销售额,0))/isnull(a.hy_jshj,0),2) end ) 会员推品占会员销比 " & vbCr &
" from " & vbCr &
"(" & vbCr &
"select a.REGISTERSUBORGAN," & vbCr &
"sum(case when a.FDELETED=1 or a.FFORBID=1 or a.createdate='1900-01-01' then 0 else 1 end ) hygs ," & vbCr &
"count(b.t270cs) t270cs," & vbCr &
"sum(case when a.FDELETED=1 or a.FFORBID=1 or a.createdate='1900-01-01' then 0 when a.createdate between '" & DateTimePicker1.Value & "' and '" & DateTimePicker2.Value & "' then 1 else 0 end ) xzhygs ," & vbCr &
"sum(case when a.FDELETED=1 or a.FFORBID=1 or a.LOCALUPDATED is null or a.LOCALUPDATED='1900-01-01'" & vbCr &
"then 0 when cast(getdate()-a.LOCALUPDATED as int )>90 then 1 else 0 end) T90wd," & vbCr &
"sum(case when a.FDELETED=1 or a.FFORBID=1 or a.LOCALUPDATED is null or a.LOCALUPDATED='1900-01-01' " & vbCr &
"then 0 when cast(getdate()-a.LOCALUPDATED as int )>90 and isnull(b.t270cs,0)>=1 then 1 else 0 end) lshys" & vbCr &
"from gl_hy a " & vbCr &
"left join (select branchguid,vipid,count(billno) t270cs from vipbill where Ftype='0' " & vbCr &
"and billdate between getdate()-365 and getdate()-90 group by branchguid, vipid)" & vbCr &
"b on a.id= b.vipid and a.REGISTERSUBORGAN=b.branchguid " & vbCr &
"group by a.REGISTERSUBORGAN " & vbCr &
") b " & vbCr &
"left join " & vbCr &
"(select a.subbh ," & vbCr &
"sum(a.jshj) jshj ,sum(round(a.ml*(a.zzsl+100)/100,2)) hsmle," & vbCr &
"sum(case when a.YHKH is not null then a.jshj else 0 end) hy_jshj ," & vbCr &
"sum(case when a.YHKH is null then a.jshj else 0 end) fhy_jshj ," & vbCr &
"sum(case when a.YHKH is not null then round(a.ml*(a.zzsl+100)/100,2) else 0 end) hy_hsmle ," & vbCr &
"count(distinct a.lsh+a.hh) gk_sku," & vbCr &
"count(distinct a.lsh) as khs," & vbCr &
"count(distinct (case when a.YHKH is not null then a.lsh else 'a' end))-1 as hy_khs," & vbCr &
"count(distinct (case when a.YHKH is null then a.lsh else 'a' end))-1 as fhy_khs," & vbCr &
"count(distinct (case when a.YHKH is not null then a.dh else 'a' end))-1 as hy_dhs," & vbCr &
"count(distinct (case when a.YHKH is null then a.dh else 'a' end))-1 as fhy_dhs," & vbCr &
"count(distinct (case when a.YHKH is not null then a.yhkh else 'a' end))-1 as hdhygs," & vbCr &
"count(a.dh) as dhs,sum(a.sl) sl," & vbCr &
"sum(case when a.YHKH is not null then a.sl else 0 end) hy_sl ," & vbCr &
"sum(case when a.YHKH is null then a.sl else 0 end) fhy_sl ," & vbCr &
"sum(case when pp.code='1' then a.jshj else 0 end ) 一线1类销售," & vbCr &
"sum(case when pp.code='2' then a.jshj else 0 end ) 一线2类销售," & vbCr &
"sum(case when pp.code<>'1' and pp.code<>'2' or pp.code is null then a.jshj else 0 end ) 普通品种销售," & vbCr &
"sum(case when m.code='01' or m.code='02' then a.jshj else 0 end ) 主次推品销售额," & vbCr &
"sum(case when a.YHKH is not null and (m.code='01' or m.code='02' ) then a.jshj else 0 end ) 会员主次推品销售额" & vbCr &
" from subfhd a left join yw_kck d on a.hh=d.hh" & vbCr &
" Left Join (Select Code,Name From Dataitem Where Dataitemtypeguid='311') M On D.Ztflsx=M.Code " & vbCr &
"Left Join (Select guid,Code,Name from Dataitem where dataitemtypeguid='20000535' ) pp On D.BrandAttribute=pp.guid " & vbCr &
"where a.kdrq between '" & DateTimePicker1.Value & "' and '" & DateTimePicker2.Value & "' " & vbCr &
"/*and ('[门店编号]'='' or a.subbh='[门店编号]') */" & vbCr &
"group by a.subbh" & vbCr &
") a on b.REGISTERSUBORGAN=a.subbh" & vbCr &
"left join gl_custom g on b.REGISTERSUBORGAN=g.tjbh" & vbCr &
"order by a.subbh"

Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, conn)
dataAdapter.SelectCommand = cmd
dataAdapter.Fill(dst, "info")
dt = dst.Tables("info")
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = dt
conn.Close()
Catch ex As Exception
End Try
'Dim count As Integer = Me.DataGridView1.Rows.Count
''Dim sum As Double = 0
'For i = 0 To count - 1
' sum += Val(Me.DataGridView1.Item("销售额", i).Value)
'Next
'ToolStripStatusLabel3.Text = ToolStripStatusLabel3.Text + sum.ToString

End Sub



本人新手,求指点!!!!不胜感激!!!
...全文
600 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
良朋 2019-02-12
  • 打赏
  • 举报
回复
你加那么多vbCr 干什么(如果要做vb.net中换行用 &_)? 不过你这样做很有好处,VB调试执行到该行语句后,在即时窗口中复制sql (你的查询字符串)的值,到SQL Server(也许你用的是SQL LITE)调试窗口中运行该SQL 语句,看有没报错?是否能查成功?或者查询所需时间是否过长?
wenoxy 2019-02-11
  • 打赏
  • 举报
回复
引用 9 楼 以专业开发人员为伍 的回复:
正规的编程技术是测试驱动的,只有刻意用测试代码找到 BUG,进行调试,才知道下一步该干什么。所以一个人的开发能力就是看它调试的动做是否专业。try......catch 只是使用条件编译开关来限制到 Release 版本才起作用的,而在 DEBUG 阶段基本上不会有 try....catch 代码。只有业余初学的人被坑爹的人引导,才会以为写一个 try....catch 代码就能让自己也看不到错误了、并且让程序继续带病工作了,从而欺骗自己。这样的人根本无法诊断 BUG,这当然是必然的,因为根本没学过正规开发调试技能。


我的确是业余初学者,连门都没有入,都是论坛上说怎么弄,我就怎么弄啊
  • 打赏
  • 举报
回复
引用 7 楼 wenoxy 的回复:
这个我加了也不起作用,数据库连接是没有问题的,主要是查询时间长了不出任何结果
"术"已经无用,先学基本的道。
  • 打赏
  • 举报
回复
正规的编程技术是测试驱动的,只有刻意用测试代码找到 BUG,进行调试,才知道下一步该干什么。所以一个人的开发能力就是看它调试的动做是否专业。try......catch 只是使用条件编译开关来限制到 Release 版本才起作用的,而在 DEBUG 阶段基本上不会有 try....catch 代码。只有业余初学的人被坑爹的人引导,才会以为写一个 try....catch 代码就能让自己也看不到错误了、并且让程序继续带病工作了,从而欺骗自己。这样的人根本无法诊断 BUG,这当然是必然的,因为根本没学过正规开发调试技能。
  • 打赏
  • 举报
回复
写了个 try....catch 证明你已经丧失了调试开发能力。这样的“开发”结果还能怎样?不可能搞正规开发。
wenoxy 2019-02-10
  • 打赏
  • 举报
回复
引用 3 楼 懒源 的回复:
[quote=引用 2 楼 wenoxy 的回复:]
我试过了设置超时时间timeout=300,也不行,查询出来还是空白,我在SQL查询分析里试过查询汇总一年的数据大约需要4分钟,300秒应该够了啊


你是在哪里设置的超时时间,
可以试试在数据库连接字符串里面添加“ConnectionTimeout=300;”[/quote]


这个我加了也不起作用,数据库连接是没有问题的,主要是查询时间长了不出任何结果
wenoxy 2019-02-10
  • 打赏
  • 举报
回复
引用 5 楼 水边2 的回复:
没有数据是因为你的Catch里没有写任何异步处理代码:
Catch ex As Exception
End Try

所以你不知道问题是sql写错了呢,还是sql太慢导致执行超时了。

另外,连接串里加timeout是指创建数据库连接的超时,并不是sql执行超时,
sql执行超时时间默认30秒,
如果希望sql执行超过这个时间,要修改
cmd.CommandTimeout = 300


多谢,这个我确实没有想到,我试试
游北亮 2019-02-02
  • 打赏
  • 举报
回复
没有数据是因为你的Catch里没有写任何异步处理代码: Catch ex As Exception End Try 所以你不知道问题是sql写错了呢,还是sql太慢导致执行超时了。 另外,连接串里加timeout是指创建数据库连接的超时,并不是sql执行超时, sql执行超时时间默认30秒, 如果希望sql执行超过这个时间,要修改 cmd.CommandTimeout = 300
  • 打赏
  • 举报
回复
写错了
“ConnectionTimeout=300;” ==> “ConnectTimeout=300;”
  • 打赏
  • 举报
回复
引用 2 楼 wenoxy 的回复:
我试过了设置超时时间timeout=300,也不行,查询出来还是空白,我在SQL查询分析里试过查询汇总一年的数据大约需要4分钟,300秒应该够了啊


你是在哪里设置的超时时间,
可以试试在数据库连接字符串里面添加“ConnectionTimeout=300;”
wenoxy 2019-02-01
  • 打赏
  • 举报
回复
引用 1 楼 likelinsiyuan 的回复:
调试,取到这段sql,数据库跑一下是否能执行,执行时间为多久,
我估计是sql执行时间太长了,可以在代码创建数据库连接时设置一下超时时间


我试过了设置超时时间timeout=300,也不行,查询出来还是空白,我在SQL查询分析里试过查询汇总一年的数据大约需要4分钟,300秒应该够了啊
  • 打赏
  • 举报
回复
调试,取到这段sql,数据库跑一下是否能执行,执行时间为多久,
我估计是sql执行时间太长了,可以在代码创建数据库连接时设置一下超时时间

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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