2012-01-04 89 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();* 

上面的代码工作,但它不看好。随机数和我自己在代码中添加随机数。 没有其他更好的主意吗?

谢谢你们的建议。至少它适合我。

+0

你试图插入设置表中的值是什么? – 2012-01-04 04:05:25

+0

@Jason。 SettingStr是逗号分隔的一对值,如service | ON,Current | 55,comments | No。设置ID是设置表的主键。 – 2012-01-04 05:07:59

回答

2

先写设置记录然后写设备记录。

+0

那么我将如何维持FK关系? – 2012-01-04 05:03:26

+1

您可以在CE中的外键上具有DELETE CASCADE,以在父记录被删除时自动删除子记录。但是,当您插入带有FKEY的表(在任何数据库上,而不仅仅是CE上)时,您始终必须先插入父项,然后再插入子项。 – 2012-01-04 05:06:28

1

您确定只有一个设备设置条目吗?

如果你有多个同一个设备的设置项,你的数据库结构不会支持你。您应该从Device表中删除SettingId列,并将Device ID列添加到设置表中。

现在您可以先将记录插入设备表中,然后使用设备ID的值作为设备表的最近记录ID将记录添加到设置表中。

如果一个SettingId可以与一个或多个设备相关联,那么您的模式将支持它。但是在这种情况下,您需要先在设置表中插入记录,然后使用该设置ID值在Device表中插入记录。