我在vb.net中选择了用于填充某些控件的satament以及带有日期值的树视图,树视图的日期值在此格式DD MON YYYY
中,并且参数传递的列格式也采用此格式我试图以这种方式传递参数
cmd.CommandText = "SELECT 'At CFO Approval ' || count(*) ||' Cheques' || ' of Rs.' ||nvl(to_char(sum(bpv_amt),'9,999,999,999'),0) CFOApp from check_data where sta_flg = 0 and bpv_date='" & TreeView1.SelectedValue & "'"
但是我担心这可能无论以何种方式起作用,请帮助
答案 0 :(得分:0)
像往常一样,不要使用字符串连接来构建sql文本 始终使用参数化查询。为什么?见Little Bobby Tables
cmd.CommandText = "SELECT 'At CFO Approval ' || count(*) ||' Cheques' || " & _
"' of Rs.' ||nvl(to_char(sum(bpv_amt),'9,999,999,999'),0) CFOApp " & _
"from check_data where sta_flg = 0 and bpv_date=:bpvdate"
cmd.Parameters.AddWithValue(":bpvdate", Convert.ToDateTime(TreeView1.SelectedValue))
我假设树视图包含有效日期
如果你的格式是DD MMM YYYY那么你可以试试这个转换(注意三个月的字母)
Dim d as DateTime = DateTime.ParseExact(TreeView1.SelectedValue.ToString(), _
"dd MMM yyyy", CultureInfo.CurrentCulture);
cmd.Parameters.AddWithValue(":bpvdate", d)
如果你有完整的月份名称,那么转换应该是
Dim d as DateTime = DateTime.ParseExact(TreeView1.SelectedValue.ToString(), _
"dd MMMM yyyy", CultureInfo.CurrentCulture);
答案 1 :(得分:0)
虽然我完全同意@ Steve关于使用参数化查询的评论,但在这种情况下,我只是建议添加一个适当的TO_DATE调用来尝试让你前进。试试这个:
cmd.CommandText = "SELECT 'At CFO Approval ' || count(*) || " &
"' Cheques' || ' of Rs.' || " &
"nvl(to_char(sum(bpv_amt),'9,999,999,999'),0) CFOApp " &
"from check_data where sta_flg = 0 and " &
"TRUNC(bpv_date)=TO_DATE('" & TreeView1.SelectedValue & "', 'DD MON YYYY')"
修改
添加了TRUNC()调用日期比较。
测试如下:
CREATE TABLE CHECK_DATA
(BPV_AMT NUMBER,
STA_FLG NUMBER,
BPV_DATE DATE);
INSERT INTO CHECK_DATA (BPV_AMT, STA_FLG, BPV_DATE) VALUES (100, 0, SYSDATE);
INSERT INTO CHECK_DATA (BPV_AMT, STA_FLG, BPV_DATE) VALUES (200, 0, SYSDATE-1);
INSERT INTO CHECK_DATA (BPV_AMT, STA_FLG, BPV_DATE) VALUES (300, 1, SYSDATE);
INSERT INTO CHECK_DATA (BPV_AMT, STA_FLG, BPV_DATE) VALUES (200, 0, SYSDATE);
现在,执行查询:
SELECT 'At CFO Approval ' || count(*) ||
' Cheques' || ' of Rs.' ||
nvl(to_char(sum(bpv_amt),'9,999,999,999'),0) CFOApp
from check_data
where sta_flg = 0 AND
TRUNC(bpv_date) = TO_DATE('29 Aug 2012', 'DD MON YYYY');
结果
At CFO Approval 2 Cheques of Rs. 300
分享并享受。