none
VB2008 SQL語法中SQL參數傳遞 疑問 RRS feed

  • 問題

  • 以前在爬文時跟發問時有學到利用簡化SQL的語句的技巧應用在VB搭配ACCESS資料庫使用上
    但今天為以前學長所留下的專案新增一個查詢的報表功能卻遇到了下面這個問題
    因為舊電腦中已將SQL2000的資料庫加入系統資料來源(ODBC)中,所以我用下列的方式來做

    命名空間
    Imports System.Data
    Imports System.Data.Odbc

    連接語法

    Dim str  as string="Dsn=PT"
    Dim sqlcon as New OdbcConnection
    dim d1 as string=DataTimePicker1.text
    dim d2 as string=DataTimePicker2.text
    Dim ds as Dataset
    sqlcon= New OdbcConnection(str)
    sqlcon.Open
    Dim sql as string ="Select * from REPORT1 where S_STIME between @d1 and @d2 order S_STIME desc"
    Using odbcdata as new OdbcDataAdapter(sql,sqlcon)
    odbcdata.SelectCommand.Parameters.AddValue("@d1",d1)
    odbcdata.SelectCommand.Parameters.AddValue("@d2",d2)
    ds=New dataSet
    odbcdata.Fill(ds,"WORK")
    Me.DataGridView1.DataSource=ds.Tables("WORK")  '執行到這邊發生異常
    End Using
    sqlcon.Close 

    異常訊息ERROR [42000] [Microsoft][ODBC SQL Sever Driver][SQL Sever]必須宣告變數'@d1'

    小弟參考之前的做法並不會出現這問題,是否有哪個部分小弟沒有注意到的
    請教各位大大了
    新手上路
    2010年2月23日 上午 06:39

解答

  • 是AddWithValue吧 ?

    還有一個重點

    CommandType 設定為 Text 時,.NET Framework Data Provider for ODBC 就不支援將具名參數傳遞到由 OdbcCommand 所呼叫的 SQL 陳述式或預存程序。不論是其中哪一種狀況,都請使用問號 (?) 替代符號。例如:

    SELECT * FROM Customers WHERE CustomerID = ?

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月23日 上午 06:43
    版主

所有回覆

  • 是AddWithValue吧 ?

    還有一個重點

    CommandType 設定為 Text 時,.NET Framework Data Provider for ODBC 就不支援將具名參數傳遞到由 OdbcCommand 所呼叫的 SQL 陳述式或預存程序。不論是其中哪一種狀況,都請使用問號 (?) 替代符號。例如:

    SELECT * FROM Customers WHERE CustomerID = ?

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年2月23日 上午 06:43
    版主
  • 是odbcdata.SelectCommand.Parameters.AddValue 這邊PO網時KEY錯
    實際上新增的報表語法中是AddWithValue這個沒錯..抱歉!

    新手上路
    2010年2月23日 上午 06:46
  • http://www.dotblogs.com.tw/regionbbs/archive/2008/10/09/5639.aspx
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年2月23日 上午 06:56
    版主
  • 感謝2位大大的幫忙....測試OK了
    新手上路
    2010年2月23日 上午 07:30