討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 討論區最近新進100則主題 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
關於"自動編號"的新增問題
更改我的閱讀文章字型大小
作者 : bjoe(FlyGoldFish)
[ 貼文 29 | 人氣 8397 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/3/6 上午 08:29:43
問題是這樣的
當小弟我新增一筆資料(用BindingNavigater)key的值是由vb自動新增的

這埵釣潃荌暋D:
1、Dataset Fill的不是全部的資料(因為資料量太大了),所以新增一筆資料時,程式自動幫Key加一。問題就是+1後,會和再資料庫堛榭ey重復(因為不是Select所有的資料)。這樣新增就會出現重覆Key值的問題。
2、另外程式是多人使用ms-sql資料庫,dataset為離線資料,當新增的時候,程式也是自動加一。問是就是當有兩個人以上在一筆資料後新增時,key值就會可能重覆,新增資料庫就會有問題了。

各位大大應該有遇到這樣的問題吧。
(我是笨笨的小孩)
可是在vb2005中有沒有就簡單解決的方式呢??

附註:因為有其他的表格要關連,所以那個key值一定會在BindingNavigater新增時取得。不能等update InsertCommand後,再去select出來。

麻煩各位大大幫忙哦,小弟也會想想辦法去,謝謝。
作者 : lolota(lolota) ASP.Net卓越專家貼文超過200則
[ 貼文 429 | 人氣 755 | 評價 2060 | 評價/貼文 4.8 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人bjoe註記此篇回應為很有道理 2006/3/6 上午 09:57:53
>1、Dataset Fill的不是全部的資料(因為資料量太大了),所以新增一筆資料時,程式自動幫Key加一。問題就是+1後,會和再資料庫堛榭ey重復(因為不是Select所有的資料)。這樣新增就會出現重覆Key值的問題。

新增時去Select Max(Key值) From table ,抓取最大的Key值,自行在加1就Ok了
>2、另外程式是多人使用ms-sql資料庫,dataset為離線資料,當新增的時候,程式也是自動加一。問是就是當有兩個人以上在一筆資料後新增時,key值就會可能重覆,新增資料庫就會有問題了。
VS2005在新增時有提供樂觀鎖定(可參考http://caterpillar.onlyfun.net/Gossip/HibernateGossip/OptimisticLocking.html)。

作者 : bjoe(FlyGoldFish)
[ 貼文 29 | 人氣 8397 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/3/6 上午 10:59:02
mm小弟了解了^^

不過在問一個vb2005相關的問題
如果是用BindingNavigater去新增的話
預設會自動增加一筆並自動編號
請問那位大大知道要如何去修改呢?

是不是先將DataTable欄位中的AutoIncremenet改成false

然後是select max編號,然後加1後,放到txtCompanyID
問題是這個動作要在那堣騆好??
放在
BindingNavigatorAddNewItem_Click不會動作呀
BindingSource_AddingNew 也不對呀
難道是DataTable_TableNewRow??
如果是這堛爾隉A小弟就不知道如何寫了^^!

小弟不材,麻煩大大們指導一下吧,感謝^^
作者 : lolota(lolota) ASP.Net卓越專家貼文超過200則
[ 貼文 429 | 人氣 755 | 評價 2060 | 評價/貼文 4.8 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/3/7 下午 12:14:00
在一開始的時候就要抓取到最新的編號(即自行加一的編號),至於要在哪裡加?
在BindingNavigator一開始要被load時加->BindingNavigator1_HandleCreated
試試看囉。然後你新增完還要在去抓取一次做編號的refresh動作!!
作者 : bjoe(FlyGoldFish)
[ 貼文 29 | 人氣 8397 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/3/8 上午 09:57:41
這樣是沒有錯啦
可是在畫面上有三個以上的datagridview和十幾個textbox同時要新增^^!
不可能在新增主table後,在reflash再來新增其他資料呀^^!

而且,有一個問題,我select max後,鎖定資料庫,可是新增的人要用很久
不就完了^^!
十個人在都新增,這樣如何去新增><

大家幫我想想吧
我可能會重寫不要用vb2005的bindingsource了
太多限制了,或是說小弟有很多功能寫不出來

嗚嗚嗚,花了三個月,整個都寫好了,就是出在insert上
作者 : zxqwzxqw(zxqwzxqw)
[ 貼文 9 | 人氣 861 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/19 上午 12:46:37
如果只是擔心KEY重覆, 何不建立一個INSERT專用的窗口

所有會影響KEY的動作都交由這個窗口來處理

由它來決定KEY~~~~參考看看
作者 : yachine(熱血青年)
[ 貼文 47 | 人氣 128 | 評價 20 | 評價/貼文 0.43 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/7 上午 09:10:16
若是多人使用的環境
應該透過可透過仲介的系統或是後端資料庫來作
意即可在離線式的資料表上一個暫時的編號
聯線上傳的時候再由仲介系統或是後端資料庫裡的程序來作

當然系統架構的設計端視你整個使用環境的狀況
若是不多人的話
那直接先鎖定馬上作insert這樣絕對不會重複
但是這樣效率就很差了
作者 : pantc328(好說) C#優秀好手貼文超過500則人氣指數超過10000點
[ 貼文 894 | 人氣 14154 | 評價 3400 | 評價/貼文 3.8 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/7 下午 12:36:23
改用 GUID 編號就不會有問題了 ,將資料表 PK 欄位改成 UniqueIdeneitifer, 而程式端用 Guid.New() 就行了
作者 : light673(吳馨琳) VB.Net頂尖高手貼文超過500則
[ 貼文 603 | 人氣 1480 | 評價 3860 | 評價/貼文 6.4 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/12/9 上午 11:03:03
:::
在SQL Server裡寫一個Store Procedure,來抓資料庫的編號,再記錄目前的編號
使用到幾號!!!
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/3 下午 02:20:23
SQL Server的table
應該可以設自動增值的欄位屬性吧

你新增資料時
別自己寫你要當key的那個欄位
就交給SQL Server幫你自動填那個key的欄位值
作者 : player(PLAYER) 貼文超過1000則人氣指數超過100000點
[ 貼文 1595 | 人氣 138661 | 評價 2840 | 評價/貼文 1.78 | 送出評價 104 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/3/14 上午 10:16:43
使用 ADO.NET 的最佳經驗分享
http://www.microsoft.com/taiwan/msdn/library/2003/Jul-2003-tw/adonetbest.htm

裡面的


避免自動增量值的衝突
作者 : pclub(識丁) VB.Net優秀好手C#優秀好手ASP.Net優秀好手貼文超過1000則
[ 貼文 1040 | 人氣 8390 | 評價 3800 | 評價/貼文 3.65 | 送出評價 8 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/22 上午 09:24:35
DataTable Key 的定義
AutoIncrement : true
AutoIncrementSeed : -1
AutoIncrementStep : -1

Fill 的時候會將資料庫的 Key 抓進來,原值不會變

新增會是 -1, -2, -3,不會跟 DataTable 中舊的列重複

寫入資料庫時,不可以 Insert Key 欄位,要讓資料庫自行新增,不會重複。每新增一筆,要把新的 Key 讀回,放到 DataTable 裡

command text:
insert into
(...) values (...); select scope_identity;

別用 ExecuteNonQuery() 要用 ExecuteScalar() 傳回的值是 decimal 不是 integer

如果用的是 TableAdapter (2005) 也可以用這個方法
作者 : roilee(Lee)
[ 貼文 28 | 人氣 6501 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/8/23 上午 08:41:50
從網路討論中看到有關 ADO.NET 在 Insert Key 避免重覆的
做法上,如果要在多人輸入模式下要有效避免 Key 重覆,
最佳做法似乎只有交給 SQL 來做,但這有一個問題,Key
值不斷長大,雖然 Key 欄位型別可以設大一點的,但總有
爆掉的一天(如果系統活過久的話)。
    一般來說,碰到這類 Key 重覆問題的,大都是要產生流水單
號的異動表,諸如 Master / Detail 表格,而這些異動資料如果
擺在一個 TABLE 上,我想不太好吧!所以有沒有較好的做法呢?
    我曾想過用年月 Create 這類 TABLE 的方式,但是程式控制
又要增加不少判斷邏輯而做罷。
    如果是中小企業使用人數不多但是又會碰到同時輸入資料的情形
(一般系統剛上線就容易碰到),或許前面所說的
"若是不多人的話那直接先鎖定馬上作 insert 這樣絕對不會重複"
這種方法就可行,我也還沒實做過,看看效率是否可以接受。
作者 : dreamyi(君毅)
[ 貼文 31 | 人氣 6638 | 評價 130 | 評價/貼文 4.19 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/4 下午 11:38:09
改用 GUID
作者 : roilee(Lee)
[ 貼文 28 | 人氣 6501 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/5 上午 09:06:08
MSDN 說明如下: 使用 SqlGuid 值
GUID 值又長又難以理解,對使用者而言不具任何意義。如果將隨機產生的 GUID 用於索引鍵值,且插入大量資料列,則會使隨機 I/O 進入索引,進而對效能產生負面影響。而且相較之下,GUID 比其他資料型別還要大。因此,一般建議僅在其他資料型別都不適用的極少案例中,才使用 GUID。

需求環境:一般中小企業(100 人上下),資料庫不會太大,就一般的異動表(如訂單)同時輸入的機會不是很大的情形,如果用 GUID 似乎不是很恰當。
    就實際狀況來說,這類異動表我只希望保持個三年左右,超過時間的就把他搬到歷史(或刪除),若用SQL 的系統自動編號來說,號碼還是一直往下 +1 ,若欄位格式設定太小就會有爆掉的情形。
    假設用傳統的自訂 Key 欄位(比如:年度加流水號),就必需在程式中撰寫處理「並行違規」的邏輯,如果一個人一次只輸入一張訂單還好處理,如果一個人可以一次在一個畫面輸入多筆訂單再批次寫入資料庫,如果二到三個人同時輸入時,就要先寫好處理「並行違規」的邏輯,以免發生輸入一堆資料確寫不進資料庫的窘境(被使用者罵翻)。因為 ADO.NET 的特性,就只好考驗程式設計師對「並行違規」處理的功力了。
 板主 : 小朱
 > ADO.NET - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - ADO.NET - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
ADO.NET
1 小朱 1520 
2 識丁 280 
3 吳馨琳 270 
4 小台 180 
5 Snaking 140 
6 mark 140 
7 好說 120 
8 ammon 100 
9 toyboy 70 
10 再見男人 50 
ADO.NET
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125