使用TableAdapter将记录插入SQL Server Compact数据库

时间:2014-02-13 18:01:39

标签: c# sql-server database backgroundworker tableadapter

我是C#和SQL Server的新手,所以如果我错过了一些看似显而易见的东西,请耐心等待。

我试图编写一个从LAN接收数据数据并将其存储到本地数据库的程序。还将有一个用于显示某些数据的GUI。我正在使用VS2010和SQL Server Compact v3.5。我已经能够创建一个连接到数据库并显示/更新表的Windows窗体应用程序,所以我相信数据库已正确连接。

我有一个后台工作程序从LAN接收数据,现在我希望后台工作程序更新数据库中的一个表。我使用过本指南:

http://msdn.microsoft.com/en-us/library/ms233812.aspx

创建以下代码部分:

           MyDataSet.MeasurementRow newMeasurementRow;
           newMeasurementRow = dataset1.Measurement.NewMeasurementRow();
           newMeasurementRow.ChannelNo = n;
           newMeasurementRow.DeviceID = DeviceID;
           newMeasurementRow.Value = f;
           newMeasurementRow.TimeStamp = DateTime.Now;

          try  
          {                                                                 
               this.dataset1.Measurement.Rows.Add(newMeasurementRow);
               this.measurementTableAdapter.Update(this.dataset1.Measurement);
               Console.WriteLine("Success ");
          }
          catch (Exception e)
          {
                Console.WriteLine("Error..... " + e.StackTrace);
                throw;            
          } 

dataset1measurementTableAdapter在代码中先前创建:

    MyDataSet dataset1 = new MyDataSet();
    MyDataSetTableAdapters.MeasurementTableAdapter measurementTableAdapter =
    new MyDataSetTableAdapters.MeasurementTableAdapter(); 

MyDataSet并且表适配器类是由“添加新数据源向导”创建的。 Measurement是我要添加到的数据库中的表的名称。

当我运行它时,我会在调用Update方法时得到以下输出:

  

类型' System.Data.SqlServerCe.SqlCeException'的第一次机会异常。发生在System.Data.SqlServerCe.dll中   类型' System.Data.SqlServerCe.SqlCeException'的第一次机会异常发生在System.Data.dll

中      

错误.....在System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo [] batchCommands,Int32 commandCount)
  在System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo [] batchCommands,Int32 commandCount)
  在System.Data.Common.DbDataAdapter.Update(DataRow [] dataRows,DataTableMapping tableMapping)
  在System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable,DataTableMapping tableMapping)
  在System.Data.Common.DbDataAdapter.Update(DataTable dataTable)

如果有人能帮助我解释这些错误或指出我可能导致问题的正确方向,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

可能最好尝试将newMeasurementRow添加到DataTable(创建一个,然后添加到数据集),这是DataSet的一部分。看起来dataadapter不能简单地将行解析为数据集的一部分,而是寻找数据表。

答案 1 :(得分:0)

所以我仍然不知道是什么原因造成我的原始代码问题,但是我尝试使用TableAdapter Insert方法而不是更新,这似乎做了我想要的没问题:

         private MyDataSetTableAdapters.MeasurementTableAdapter measurementTableAdapter =
         new MyDataSetTableAdapters.MeasurementTableAdapter();

         measurementTableAdapter.Insert((n+1), DeviceID, DateTime.Now, Values[n]);