none
vb2008 DataGridview 更新問題(共同主鍵情況下) RRS feed

  • 問題

  • 親愛的各位大大:

    我sql中找出重覆的資料並利用ROW_NUMBER() + CTE 創一個欄位而產生一個temp Table,然後將temp Table的資料給Datagridview。

    等使用者Datagridview更新完畢後,將datagridview的資料存入Sql Server中,但問題是Sql Server中沒有剛剛創建的欄位rnk,請問各位大大我要如何把資料更新?

    程式碼如下

     

     Dim fs As New SqlDataAdapter("With temp as (SELECT TA001,TB002,TB003,TA012,TA003,TB004,TB005,TB006,MB064,TB009,MB036,MB039,MB067,TB011,MA002,TB032,TB016,TD003,TD017,TY016,TD008,TD011,TC006,TC007,TD007,TD012,TC011,ETD012,ETC011,QTIME ,Row_Number() over(order by TA001,TB002,TB003) AS RNK  from PURS Where TA001='" + TextBox10.Text + "' AND TB002='" + TextBox11.Text + "'AND TB003='" + TextBox9.Text + "' ) select *  from temp ", strDbCon)

    問題是:SQL Server中無創建的rnk欄位

    以前我更新是使用類似如下程式碼

    'cmd = New SqlCommand("UPDATE PURS SET TC001=@TC001,TC002=@TC002,TD003=@TD003,TY016=@TY016,TD011=@TD011,TC006=@TC006,TC007=@TC007,TD007=@TD007,ETC011=@ETC011,ETD012=@ETD012" + " WHERE  TA001=@TA001 AND TB002=@TB002 AND TB003=@TB003 AND TD017=@TD017 ", conn)

    但如今上面的TD017=@TD017已經不存在。且rnk值可能是1、2、3或1、2或1

    請問各位大大這要怎樣將Datagridview值存入SQL SERVER中

    謝謝各位大大

    2011年3月14日 上午 06:17

解答

所有回覆

  • What is rnk?

    Why rnk relate to TD017?


    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年3月15日 上午 04:12
  • 親愛的大大:

    情況一:

    簡單的說假設我有三筆資料其中欄位包含TA001(單別),TB002(單號),TB003(序號),TD017(廠商),TB009(數量)。

    一開始的時候這個欄位的內容皆相同,其中TA001(單別),TB002(單號),TB003(序號)皆有相同值 即

    單別    單號    序號    廠商    數量
    333     0313   0001 

    333     0313   0001

    333     0313   0001

    然後由使用者填入廠商 跟數量,填入的廠商會不同,但數量可能不同或相同。

    在此情況下我新增一個ROW_NUMBER() 名叫RNK (但是SQL Server上無此欄位)就成為如下情況

    單別    單號    序號    廠商    數量    RNK
    333     0313   0001                         1

    333     0313   0001                         2

    333     0313   0001                         3

    請問更新程式該如何寫?

     

    2011年3月15日 上午 07:06
  • 不是看得很懂。 請問你的這張資料表沒有主索引鍵嗎? 抓資料的時候連同主索引鍵也一併抓出來當做update的依據就行了
    2011年3月15日 上午 07:59
  • 阿尼大大:

               就是因為只有單別+ 單號+ 序號為主索引鍵值才會加入ROW_NUMBER() + CTE 創一個欄位而產生一個temp Table,將temp Table給Datagrideview。然後用單別+ 單號+ 序號+rnk(由ROW_NUMBER() + CTE 創出的一個欄位叫RNK來區分相同資料) 但是要存入資料庫時卻因資料庫中無RNK這個欄位而無法存入。所以就很麻煩,不知怎麼寫。感謝大大您的回覆

     

    2011年3月15日 上午 08:39
  • 主索引鍵必須是唯一值,你的單號+單號+序號會出現重複的值,所以不是主索引鍵
    2011年3月16日 上午 04:21
  • Agreed with 阿尼, you have more than one record on "單號+單號+序號", that means you cannot depends on this combination to be the Primary Key
    大家一齊探討、學習和研究,謝謝!
    Microsoft MVP, Microsoft Community Star(TW & HK), MCT,
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD
    2011年3月16日 上午 06:49