型付DataSetをデザインするとき、AutoIncrementは使わない。(DBに実際に書き込まれる番号とことなることがあり、なんだかしっくりこないので)
と思ったが。AutoIncrementを使わないと、新しい行をDataSetに追加したときにKeyがNullになりエラーになる。
主キーなのでNull許容にはできない。よって、Null以外の値をなにかいれてやらないといけない。
それはつまり、AutoIncrementで実現できる(AutoIncrementで実現するのが一番シンプル)。
プログラム上でAutoIncrementで取得された新しいユニークナンバーは、必ずしもDBに登録したときに設定される新しいユニークナンバーと
一致するとは限らない。
ので、主キー列は非表示にするのが望ましい。
DataSetデザイナでは、以下のの現象が起きる(たぶんバグ。Visual Studio 2010)。
「リレーションシップのみ」のリレーションがあるとき、親カラムをAutoIncrementにしようとするとエラーになり不可。
しょうがないので、リレーションシップを解除し、子カラム親カラムともにAutoIncrementにした後で
リレーションをつなぎなおす。
その後、子をAutoIncrementでなくする。
こうすことでやっと、親だけAutoIncrementという状況ができる。
(MySqlではAutoIncrementプロパティが取り込まれないのでこういった問題が見える)
(2011/0312 追記)
どうも、これはAutoIncrementにするとUIntからIntになるという型付DataSetの仕様によるものでは無いかと思われる。
AutoInclement
AutoIncrementとUIntの同時設定不可
.NETでは、型付DataSetをデザインするとき、AutoIncrementの列についてUnsignedを同時に設定できない(仕様らしい)。
よって、MySQLでAutoIncrementを指定する場合は、Unsignedにしないのが無難。
参考ページ
@@IDENTITY クライシスを管理する
http://msdn.microsoft.com/ja-jp/library/ms971502.aspx
型付DataSetで読み取り専用テーブルを作るべきか
作ると、列が増えたときなど、全部に塚するのが面倒
.NET DBソフト作成手順
DB設計を行う(テーブル構成をある程度確定させる)
DBに対応した型付DataSetを作成(自動作成できる)
SqlServer、Access以外(MySql等)だとここでちょっとこつがいるので大変
外部DBを持つ予定がない場合は、型付DataSetを自分で作成することになる
DB設計を変更するときは(ちょっと大変)
まず、変更対象の列やテーブルに関連づいているプログラムについて、関連付けを一旦消す(大変)
型付DataSetで変更対象の列やテーブルを消す
DB上で変更処理をする
型付DataSet上に新たに変更後の要素を作成する
変更対象の列やテーブルに関連づいているプログラムについて、関連付けをやり直す(大変)
最終更新:2011年07月27日 14:14