C# SQL CE&;数据集-行不存在

C# SQL CE&;数据集-行不存在,c#,dataset,sql-server-ce,asp.net-3.5,C#,Dataset,Sql Server Ce,Asp.net 3.5,我(刚接触并)使用SQL CE数据库,该数据库稍后将连接到一个项目,在该项目中,我们通过串行端口向设备发送和接收信息。该数据库将存储有关通信的每个部分的信息。当涉及到更新数据集并将更新后的数据提交到数据库时,我有点卡住了 data = new DataSet(); adapter = new SqlCeDataAdapter("SELECT * FROM " + [table_name]) builder = new SqlCeCommandBuilder(adapter); adapter.F

我(刚接触并)使用SQL CE数据库,该数据库稍后将连接到一个项目,在该项目中,我们通过串行端口向设备发送和接收信息。该数据库将存储有关通信的每个部分的信息。当涉及到更新数据集并将更新后的数据提交到数据库时,我有点卡住了

data = new DataSet();
adapter = new SqlCeDataAdapter("SELECT * FROM " + [table_name])
builder = new SqlCeCommandBuilder(adapter);
adapter.Fill(data, [table_name]);

data.Tables[table_name].Rows[identity_value][a_column] = a_column_value;
adapter.Update(data, [table_name]);
在运行此方法之前,我要确保表中有一条标识值为1的记录。但是,在调用adapter.Update()之前,我得到了一个
在位置1处没有行的
IndexOutOfRangeException。我假设我误解了如何使用和更新数据集。有什么建议吗

在尝试更新行之前,我已尝试查看数据集,但是调试器似乎不允许我查看数据集,有什么方法可以做到这一点吗?

尝试以下方法:

var rows = data.Tables[table_name].Select(String.Format("[Id] = {0}",identity_value));

if (rows.Length == 1)
{
    rows[0][a_column] = a_column_value;
}
您对属性
行的解释错误

data.Tables[table_name].Rows[ROWINDEX][COLUMNINDEX]
ROWINDEX是数组索引,而不是标识

建议:

如果必须使用
数据集
,则也可以使用以下内容加载表架构信息:

adapter.Fill(数据,[table_name])此操作仅加载数据:

然后,如果在
DataTable
中至少有一列指定为主键列,则可以使用以下命令获取行:


使用DataSet并不是访问SQL Server Compact最有效的方法我认为您需要调用builder.GetInsertCommand(),builder.GetUpdateCommand(),builder.GetDeleteCommand(),在您尝试更新数据适配器之前。这不是我的设计决定,但是您会推荐什么?请仔细阅读这些要调用的命令,虽然我同意它们似乎是有益的,但实际上在这一瞬间似乎没有帮助谢谢您的解决方案(有效!),只是想知道您是否可以向我解释一下我尝试的问题是什么?@SimonJohnson在回答中添加了这样一个问题:没有(优雅的)方法直接获取数据集中的一行(通过该行的标识字段)并修改一些数据?对两个适配器使用相同的表名填充,但adapter.FillSchema()声明数据表为空`数据=新数据集();adapter=new SqlCeAdapter(“从[table_name]中选择*,其中[table_identity]=”+tableidentity,connection)builder=new SqlCeBuilder(adapter)adapter.FillSchema(data.table[table_name],SchemaType.Mapped)@SimonJohnson dataSet.Tables.Add(新数据表(tableName));sqlCeDataAdapter.FillSchema(dataSet.Tables[tableName],SchemaType.Mapped);sqlCeDataAdapter.Fill(dataSet.Tables[tableName]);
adapter.FillSchema(data.Tables[table_name], SchemaType.Mapped);
DataRow foundRow = data.Tables[table_name].Rows.Find(identity_value);