none
SqlCeDataReader 發生了一個錯誤訊息~A quotation mark delimiter is missing from the end of the query. RRS feed

  • 問題

  • Sub FindData(ByVal cmdstr As String)
            'cmdstr = "Select custno,custName,prono,proname,free,pono from salePO where pno="" and listno='" + cmbOrder.Text + "'"
    
            Dim CMD As SqlCeCommand = New SqlCeCommand(cmdstr, sqlcon)
            Dim dr As SqlCeDataReader = CMD.ExecuteReader()
            If dr.Read Then
                lblcustNo.Text = dr.Item("custno")
                lblcustname.Text = dr.Item("custname")
                lblprono.Text = dr.Item("proNo")
                lblproname.Text = dr.Item("proname")
                lblfree.Text = dr.Item("free")
                lblpono.Text = dr.Item("pono")
            Else
                lblcustNo.Text = ""
                lblcustname.Text = ""
                lblprono.Text = ""
                lblproname.Text = ""
                lblfree.Text = ""
                lblpono.Text = ""
                button4.Enabled = False
                button5.Enabled = False
            End If
        End Sub

    錯誤訊息:
    A quotation mark delimiter is missing from the end of the query.

    請教各位大大~是哪裡有問題呢??
    我剛剛還可以用呀~就把它寫成SUB就這樣了

    IDS
    2009年10月5日 上午 09:52

解答

  • 1. 你少了一個單引號。
    2. 最好改用並趕快習慣使用參數的方式,否則 SQL Injection 會與你形影不離。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    • 已提議為解答 Lolota Lee 2009年10月5日 上午 10:14
    • 已標示為解答 Lolota Lee 2009年10月12日 上午 05:18
    2009年10月5日 上午 10:14
    版主
  • Sub FindData(ByVal pno As String, ByVal ListNo As String)
            Dim cmdstr As String = "Select custno,custName,prono,proname,free,pono from salePO where pno=@pno and listno=@listno"
    
            Dim CMD As SqlCeCommand = New SqlCeCommand(cmdstr, sqlcon)
    
            CMD.Parameters.AddWithValue("@pno", pno)
            CMD.Parameters.AddWithValue("@listno", ListNo)
    
            Dim dr As SqlCeDataReader = CMD.ExecuteReader()
    
            If dr.Read Then
                lblcustNo.Text = dr.Item("custno")
                lblcustname.Text = dr.Item("custname")
                lblprono.Text = dr.Item("proNo")
                lblproname.Text = dr.Item("proname")
                lblfree.Text = dr.Item("free")
                lblpono.Text = dr.Item("pono")
            Else
                lblcustNo.Text = ""
                lblcustname.Text = ""
                lblprono.Text = ""
                lblproname.Text = ""
                lblfree.Text = ""
                lblpono.Text = ""
                button4.Enabled = False
                button5.Enabled = False
            End If
    End Sub

    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    • 已標示為解答 kentsl 2009年10月26日 上午 03:00
    2009年10月5日 上午 11:59
    版主

所有回覆

  • Hi!

    你的 sqlcon 、 cmdstr 有資料嗎?
    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年10月5日 上午 10:03
    版主
  • 確定可以用~因為剛剛還可以用~
    線在抓出來是下的SQL有問題
    我下 select * from salePO就沒問題
    所以方向我已經抓到了~謝謝小歐大大
    IDS
    2009年10月5日 上午 10:05
  • 1. 你少了一個單引號。
    2. 最好改用並趕快習慣使用參數的方式,否則 SQL Injection 會與你形影不離。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    • 已提議為解答 Lolota Lee 2009年10月5日 上午 10:14
    • 已標示為解答 Lolota Lee 2009年10月12日 上午 05:18
    2009年10月5日 上午 10:14
    版主
  • 小朱大大~跟您詢問參數問題~

    請問您說的參數是指以下的做法嗎??

    string.format(select * from salePO where listNo='{0}',"A01")

    還是別種方式??

    IDS
    2009年10月5日 上午 10:23
  • SqlCeCommand.Parameters 屬性

    應該是這個吧,參考以上...
    • 已編輯 Joe Hung 2009年10月6日 上午 02:53
    2009年10月5日 上午 11:25
  • Sub FindData(ByVal pno As String, ByVal ListNo As String)
            Dim cmdstr As String = "Select custno,custName,prono,proname,free,pono from salePO where pno=@pno and listno=@listno"
    
            Dim CMD As SqlCeCommand = New SqlCeCommand(cmdstr, sqlcon)
    
            CMD.Parameters.AddWithValue("@pno", pno)
            CMD.Parameters.AddWithValue("@listno", ListNo)
    
            Dim dr As SqlCeDataReader = CMD.ExecuteReader()
    
            If dr.Read Then
                lblcustNo.Text = dr.Item("custno")
                lblcustname.Text = dr.Item("custname")
                lblprono.Text = dr.Item("proNo")
                lblproname.Text = dr.Item("proname")
                lblfree.Text = dr.Item("free")
                lblpono.Text = dr.Item("pono")
            Else
                lblcustNo.Text = ""
                lblcustname.Text = ""
                lblprono.Text = ""
                lblproname.Text = ""
                lblfree.Text = ""
                lblpono.Text = ""
                button4.Enabled = False
                button5.Enabled = False
            End If
    End Sub

    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    若不想快點得到解答,可以儘量把問題寫模糊一點,愈模糊愈不會得到解答。
    • 已標示為解答 kentsl 2009年10月26日 上午 03:00
    2009年10月5日 上午 11:59
    版主