none
VB2005 SQL server資料庫小問題 RRS feed

  • 問題

  • 寫專題之用

    敝人建了資料庫

    並增了資料表"會員資料"

    內有欄位"帳號" & "密碼"

    資料型態都是VarChar(16)

    但是為什麼只要打了英文後面就會自己用空格補齊到16個字

     

    而我在使用vb新增"英文"資料進去的時候

    卻出現

    這個內容中不允許有名稱 "test"。

    有效的運算式包括常數、常數運算式及 (某些內容中) 變數。不允許使用資料行名稱。

     

    是我的資料型態有誤?

    補充..

    只要我用英文的欄位名稱

    VB就都讀取不到任何欄位..

    只要是英文的東西就不能用...除了資料庫的名稱

     

     

    抱歉 因為是非常普通的寫法@@就沒附上程式碼

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Dim sqlstr As String
            Dim acc As String
            Dim pwd As String
            conn = New SqlConnection(connstr)
            conn.Open()
            acc = TextBox1.Text
            pwd = TextBox2.Text
            cmd.Connection = conn
            sqlstr = "insert into 會員資料 (帳號,密碼) values(" & acc & "," & pwd & ")"
            cmd.CommandText = sqlstr
            cmd.ExecuteNonQuery()
            conn.Close()
            conn.Dispose()
            conn = Nothing
            MessageBox.Show("加入會員成功!!請馬上登入")
        End Sub

    • 已編輯 Eric.Liao 2010年5月1日 下午 01:31
    2010年5月1日 上午 03:50

解答

  • 幾個建議

    (1) 儘量不要用中文當資料庫名稱或攔位名稱, 使用英文則要避開關鍵字, 如果非這樣做不可, 請加上[]符號

    ex: Select [帳號], [密碼] From [會員資料]

    (2) 使用參數化查詢, 不要用組字串的方式組SQL語法, 組字串會有很多問題產生, 尤其是會有SQL Injection的疑慮. (MSDN文件庫應該不會有這種寫法吧 ?)

    "insert into 會員資料 (帳號,密碼) values(" & acc & "," & pwd & ")" <--不要這樣用

    要改成 "insert into [會員資料] ([帳號],[密碼] ) values (@acc, @pwd)"

    然後用SqlCommand.Parameters.AddWithValue (這算比較方便的了)來加入參數,

    ex : Cmd.Parameters.AddWithValue("@acc", acc)

    詳細用法請參閱MSDN文件庫 [SqlCommand 類別 ]


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月1日 下午 01:40
    版主

所有回覆

  • 看起來像是程式有問題
    2010年5月1日 上午 04:17
  • 先把 [.NET Framework 開發人員手冊 ADO.NET ] 研究研究, 再繼續往下寫可能會比較順利

    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月1日 上午 05:33
    版主
  • 你新增資料的程式碼貼出來才能討論。

    為什麼總有一些人,總以為別人是神,能透過虛空直接看到原始碼呢?


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年5月1日 上午 09:36
  • 不好意思@@

    因為也是看MSDN才寫出來的

    還是是因為我用express版本

    才沒辦法?

    2010年5月1日 下午 01:32
  • 幾個建議

    (1) 儘量不要用中文當資料庫名稱或攔位名稱, 使用英文則要避開關鍵字, 如果非這樣做不可, 請加上[]符號

    ex: Select [帳號], [密碼] From [會員資料]

    (2) 使用參數化查詢, 不要用組字串的方式組SQL語法, 組字串會有很多問題產生, 尤其是會有SQL Injection的疑慮. (MSDN文件庫應該不會有這種寫法吧 ?)

    "insert into 會員資料 (帳號,密碼) values(" & acc & "," & pwd & ")" <--不要這樣用

    要改成 "insert into [會員資料] ([帳號],[密碼] ) values (@acc, @pwd)"

    然後用SqlCommand.Parameters.AddWithValue (這算比較方便的了)來加入參數,

    ex : Cmd.Parameters.AddWithValue("@acc", acc)

    詳細用法請參閱MSDN文件庫 [SqlCommand 類別 ]


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月1日 下午 01:40
    版主