0

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

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 的记录。但是,There is no row at position 1在我调用 adapter.Update() 之前,我得到了一个 IndexOutOfRangeException。我假设我误解了如何使用和更新数据集。有什么建议吗?

在尝试更新行之前,我尝试查看数据集,但是调试器似乎不允许我查看数据集,有没有办法做到这一点?

4

1 回答 1

0

试试这个:

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

if (rows.Length == 1)
{
    rows[0][a_column] = a_column_value;
}

你在解释错误的财产Rows

data.Tables[table_name].Rows[ROWINDEX][COLUMNINDEX]

ROWINDEX 是数组索引而不是标识

一条建议:

如果您必须使用SqlCeDataAdapter.FillSchemaDataSet加载表模式信息:

adapter.FillSchema(data.Tables[table_name], SchemaType.Mapped);

adapter.Fill(data, [table_name]);这仅加载数据:

然后,如果您在 中至少有一列指定为主键列,则DataTable可以使用DataRowCollection.Find Method获取该行:

DataRow foundRow = data.Tables[table_name].Rows.Find(identity_value);
于 2013-03-01T14:29:20.047 回答