2012-08-28 47 views
-1

我有選擇vb.net中的satament來填充一些控件,也是一個帶日期值的treeview treeview的日期值是在這個Formate DD MON YYYY以及參數通行證是在這種格式。我正在試圖傳遞參數以這種方式oracle sql參數在vb.net中不工作

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

但我擔心這是不以任何方式什麼可以b是出isuue工作,請幫助

回答

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); 
+0

'字符串未被識別爲有效的DateTime.'這裏是你的建議後的錯誤 – user1583775

+0

正如我所說,我假設樹視圖包含有效的日期。那麼SelectedValue的價值是什麼?這是一個日期? – Steve

+0

沒有我已經在我的問題格式都是'DD MON YYYY'但是錯誤顯示 – user1583775

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 

分享和享受。

+0

This Did'nt Work for me – user1583775

+0

@ user1583775 - 我改變了查詢,爲日期比較添加了TRUNC()調用。測試表明這應該起作用。試一試。 –

+0

'「SELECT'CFO Approval'|| count(*)||'檢查盧比的'||'。 || nvl(to_char(sum(bpv_amt),'9,999,999,999'),0)來自check_data的CFOApp,其中sta_flg = 0和bpv_dte = '23 2012年8月'''先生這有效,但是當我用「&TreeView1.SelectedVlaue &「,然後找不到數據 – user1583775