none
資料庫疑問,請教高手 RRS feed

  • 問題

  • 請問高手大大們,我在form1要連結了資料庫我設有新增、及刪除,及一個textbox,

    這是當我按下新增後的程式碼:

     Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=C:\sum.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
                cmdl.CommandText = "Insert into 企管系 (人員名稱) values ('" + TextBox1.Text + "')"
                cmdl.ExecuteNonQuery()
                oledbl.Close()
            End If

    這是我按下刪除的程式碼:

     Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=C:\sum.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
                cmdl.CommandText = "delete From 企管系 Where 人員名稱= '" + TextBox1.Text + "'"
                cmdl.ExecuteNonQuery()
                oledbl.Close()
            End If

    請問高手大大們我的問題是,如果今天我資料庫裡的欄位不只有"人員名稱"一個欄位,而是很多個的話我用這樣的刪除方式是很沒效率的,

    請問如果我想在textbox裡只接輸入"識別碼號碼"後按刪除,那電腦就會自動把該欄的資料給刪除,請問我該如何寫,請高手大大教我程式碼

    那個部份該改進謝謝。

    2010年5月21日 下午 03:01

解答

  • 我不太了解你的問題,但 DELETE FROM 是刪除列,不管那一列有多少欄位。
    WHERE 只是對你的 DELETE 行為下條件而已,如果沒有下,就是刪除全部的資料。
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    • 已標示為解答 陳嘉樺 2010年5月21日 下午 04:06
    2010年5月21日 下午 03:25
    版主

所有回覆

  • 我不太了解你的問題,但 DELETE FROM 是刪除列,不管那一列有多少欄位。
    WHERE 只是對你的 DELETE 行為下條件而已,如果沒有下,就是刪除全部的資料。
    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    • 已標示為解答 陳嘉樺 2010年5月21日 下午 04:06
    2010年5月21日 下午 03:25
    版主
  • 1. 關於Insert / Update/ Delete , 參考一下MSDN文件庫的內容

    [INSERT (Transact-SQL) ]

    [DELETE (Transact-SQL) ]

    [UPDATE (Transact-SQL) ]

    2. 如果你有爬文的話 應該會發現我們通常不建議在程式碼中用組字串的方法組SQL Statement, 而是建議使用參數化查詢.

    關於這個議題, 請參閱論壇既有討論, 我就不再多寫了

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2


    以下是簽名檔, 請勿沒事對號入座
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年5月21日 下午 03:35
    版主
  • 版主妳好,我試過二種方式

    第一:

     Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=C:\sum.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
                cmdl.CommandText = "delete From 企管系 (識別碼) = '" + TextBox1.Text + "'"
                cmdl.ExecuteNonQuery()
                oledbl.Close()
            End If

    第二:

     Dim oledbl As New OleDbConnection
            oledbl.ConnectionString = "provider = microsoft.jet.oledb.4.0; data source=C:\sum.mdb"
            oledbl.Open()
            If ConnectionState.Open Then
                Dim cmdl As New OleDbCommand
                cmdl.Connection = oledbl
               cmdl.CommandText = "delete From 企管系 Where 識別碼= '" + TextBox1.Text + "'"
                cmdl.ExecuteNonQuery()
                oledbl.Close()
            End If

    可是當執行後卻出現錯誤

    說我  cmdl.ExecuteNonQuery()    <---- FROM 子句中的語法錯誤。

    (我的識別碼是自動產生的)

    請問我程試碼那裡錯了? 謝謝指教

     

    2010年5月21日 下午 03:53
  • 原來是我搞錯了,我知道問題錯在那了,謝謝版主跟Bill Chung 大大
    2010年5月21日 下午 04:05
  • (1)   cmdl.CommandText = "delete From 企管系 (識別碼) = '" + TextBox1.Text + "'" -->沒有這種寫法

    (2)   cmdl.CommandText = "delete From 企管系 Where 識別碼= '" + TextBox1.Text + "'" <--型態不符, 識別碼是數字, 但你用單引號變成了文字

    (3)  給你的資料有看嗎 ? 用參數化查詢真的會比較好, 不然下次你再遇到其它資料型態 (ex: 日期時間)又會發生問題, 或是你的SQL 語法長一點, 你光搞 + , " ,' ,# 很快就會被弄糊塗.

    (4)  給的資料link要看, 那些對你都有幫助, 如果你有稍微看一下, 第一個寫法你就自己會知道錯在哪了

     


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