SQL CE &数据集-行不存在

本文关键字:-行 不存在 数据集 CE SQL | 更新日期: 2023-09-27 18:01:39

我(新的和)与SQL CE数据库工作,稍后将连接到一个项目,我们发送和接收信息到一个设备通过SerialPort。该数据库将存储有关通信的每个部分的信息。当涉及到更新Dataset并将更新后的数据提交到数据库时,我有点卡住了。

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()之前,我得到了一个There is no row at position 1 IndexOutOfRangeException。我假设我误解了如何使用和更新数据集。任何建议吗?

我已经尝试查看数据集之前尝试更新行,但调试器似乎不让我窥视数据集,有办法做到这一点吗?

SQL CE &数据集-行不存在

try this:

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是数组索引而不是标识

一个建议:

如果你必须使用DataSet,那么加载表模式信息也与SqlCeDataAdapter。FillSchema:

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

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

然后,如果你至少有一个列指定为主键列在DataTable中,你可以得到行与DataRowCollection。寻找方法:

DataRow foundRow = data.Tables[table_name].Rows.Find(identity_value);