2012-01-04 18 views
0

私はSQL CEで作業しており、以下の表があります。SQL CE 3.5複数のテーブルに挿入

デバイス

  • DEVID - プライマリ、BIGINT、自動インクリメント
  • 名 - データ型はnvarchar(100)
  • 電圧 -
  • 本当SettingID - BIGINT、FK_SettingTable

別表:

設定

  • SettingID - プライマリ、BIGINT
  • SettingStr - NVARCHAR(200)

したがって、最初の表は、デバイステーブルであり、別のテーブルを設定しています。デバイステーブルと設定テーブルには、外部キーの関係があります。

どのように値のSQL CEを挿入できますか? マイ挿入ステートメントは、だから私は、デバイステーブルに値を挿入することができます

"INSERT INTO DEVICE(Name,Voltage) VALUES('xyz',120)". 

のように見えます。しかし、どのようにして両方のテーブルに値を挿入できますか?

データベース設計を変更する必要はありますか?

更新:上記のコード

*string connstring = "Data Source=C://Documents//DataBase.sdf"; 
      SqlCeConnection cnn = new SqlCeConnection(connstring); 
      if (cnn.State == ConnectionState.Closed) cnn.Open(); 

      Random rm = new Random(); 
      int id = rm.Next(); 

      string str = "INSERT INTO Settings (SettingID,Settings) VALUES(" + id + ",'" + textBox3.Text + "')"; 
      SqlCeCommand command = new SqlCeCommand(str, cnn); 
      command.ExecuteNonQuery(); 

      str = "INSERT INTO Device (Mfr,Model,SettingID) VALUES('" + textBox1.Text + "','" + textBox2.Text + "'," + id + ")"; 
      command.CommandText = str; 

      command.ExecuteNonQuery();* 

は動作しますが、それは良く見えるdoesntの。乱数と乱数を自分のコードで追加します。 他のより良いアイデアはありませんか?

ご意見ありがとうございます。少なくともそれは私のために働く。

+0

設定テーブルにどのような価値を入れようとしていますか? –

+0

@ Jason。 SettingStrはservice | ON、Current | 55、comments | Noのような値のコンマ区切りのペアです。設定IDは、テーブルを設定するための主キーです。 –

答えて

2

設定レコードを最初に書き込み、次にデバイスレコードを書き込みます。

+0

それから私はFK関係をどのように維持するのですか? –

+1

CEの外部キーにDELETE CASCADEを設定すると、親レコードが削除されたときに自動的に子レコードを削除できます。ただし、FKEY(CEのみではなく)のデータベースにテーブルを挿入する場合は、常に親を挿入してから子を挿入する必要があります。 –

1

デバイスの設定エントリは1つだけですか?

同じデバイスの設定エントリが複数ある場合は、DB構造がサポートされません。 SettingId列をDeviceテーブルから削除し、DeviceID列をSettingテーブルに追加する必要があります。

これで、デバイステーブルにレコードを挿入し、デバイステーブルのレコードIDをデバイステーブルの最新のレコードIDとして設定テーブルに追加することができます。

1つ以上のデバイスに1つのSettingIdを関連付けることができる場合、そのスキーマはそれをサポートします。しかし、その場合は、設定テーブルにレコードを挿入し、その設定ID値を使用してデバイステーブルにレコードを挿入する必要があります。

関連する問題