none
VS2008 express DataAdapter update RRS feed

  • 問題

  • update command 有兩種方法,有什麼不同?
    1 Using sqlupdatecommand.
    2 using sqlcommandbuilder

    用方法一,為何要加入paramenter? 不是根據rowstatus update?
    如果要用parameter.value="My name",又要dt.row(0).item(1)="My name" 改變row status,好似好stupid.
    另外就是為何我在VS2008 中找不到dbdataadapter? 我只找到tableadapter.

    Dim ad as new sqldataadapter(selectSQL,conStr)
    Dim dt as new datatable()
    ad.fill(dt)

    1 Using sqlupdatecommand.
    ad.updatecommand = new sqlcommand("Update customer set name = @name where id = @id" ,conStr)
    dt.row(0).item(1) = "My name"
    ad.update(dt) --------> error no paramenter, @name

    2 using sqlcommandbuilder
    dt.row(0).item(1) = "My name"
    ad.update(dt) -------> ok , 1 row affected

    • 已編輯 EricHeung 2009年9月23日 上午 09:54 wrong code
    2009年9月23日 上午 09:53

解答

  • 1 Using sqlupdatecommand.
    ad.updatecommand = new sqlcommand("Update customer set name = @name where id = @id" ,conStr)
    dt.row(0).item(1) = "My name"
    ad.update(dt) --------> error no paramenter, @name

    2 using sqlcommandbuilder
    dt.row(0).item(1) = "My name"
    ad.update(dt) -------> ok , 1 row affected

    1. 用 SqlCommand,你就得自己寫 SQL 指令和處理參數,這很正常,在 Windows Forms 中也一樣。
    2. 用 SqlCommandBuilder,它會自動幫你產生 Parameter 物件,這也很正常,但用 CommandBuilder 產生的 SQL 可能會讓你笑不出來(效能因素)。
    3. Visual Studio 2005 開始,DataAdapter 已經改由 TableAdapter 所取代,不過它的核心還是 DataAdapter,TableAdapter 是由 VS 自動產生的程式碼。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    • 已標示為解答 Lolota Lee 2009年9月28日 上午 06:34
    2009年9月24日 下午 04:58
    版主

所有回覆

  • HI,

    1) 用Sql UpdateCommand是自已寫SQL敘述執行Update的工作, SqlCommandBuilder可以為DataAdapter自動建立Update的敘述
    2) VS2008有支援DbDataAdapter類別
    3) 利用參數進行資料庫操作是比較安全的做法, 如果覺得改變RowStatus不方便, 可以考慮直接下SQL敘述去操作資料庫中的記錄
    2009年9月23日 下午 12:48
  • 看到這裏是Web form 工具箱沒有
    http://forums.asp.net/p/1221857/2188524.aspx#2188524

    window form 可以在工具箱到用到
    這個為什麼Web form 沒有?

    如果比較SqlCommandBuilder 和 利用參數更新.
    安全性是否一樣?

    還試下將commandbuilder.updatecommand.commandText 作為sqlcommand.updatecommand
    結果還是要加入參數.
    2009年9月24日 下午 03:43
  • 1 Using sqlupdatecommand.
    ad.updatecommand = new sqlcommand("Update customer set name = @name where id = @id" ,conStr)
    dt.row(0).item(1) = "My name"
    ad.update(dt) --------> error no paramenter, @name

    2 using sqlcommandbuilder
    dt.row(0).item(1) = "My name"
    ad.update(dt) -------> ok , 1 row affected

    1. 用 SqlCommand,你就得自己寫 SQL 指令和處理參數,這很正常,在 Windows Forms 中也一樣。
    2. 用 SqlCommandBuilder,它會自動幫你產生 Parameter 物件,這也很正常,但用 CommandBuilder 產生的 SQL 可能會讓你笑不出來(效能因素)。
    3. Visual Studio 2005 開始,DataAdapter 已經改由 TableAdapter 所取代,不過它的核心還是 DataAdapter,TableAdapter 是由 VS 自動產生的程式碼。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    • 已標示為解答 Lolota Lee 2009年9月28日 上午 06:34
    2009年9月24日 下午 04:58
    版主