-1

我在 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 & "'"

但我担心这无论如何都不起作用,问题可能是什么,请帮忙

4

2 回答 2

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

分享和享受。

于 2012-08-28T11:18:13.787 回答
0

像往常一样,不要使用字符串连接来构建 sql 文本。
始终使用参数化查询。为什么?见小鲍比桌

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);
于 2012-08-28T08:13:44.810 回答