我是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;
}
dataset1
和measurementTableAdapter
在代码中先前创建:
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)
如果有人能帮助我解释这些错误或指出我可能导致问题的正确方向,我们将不胜感激。
答案 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]);