我在一个数据表上做一些工作,我填充了一个由访问数据库制成的 oledbdataadapter。我偶然发现了这个错误:
原来我的表有这样的结构: ID --> autonumber(PK)
lazos_>文本
协会->文本
当我填写我的数据表时,所有值都传递给它,所有正确值都没有任何问题。我插入一个新行,如“插入行”部分所示。
我这样做是因为我的 pk 将在行创建时插入“自动编号”,但显然它没有这样做,因为当我循环处理行时,我得到一个“无效的强制转换异常”,其中一个对象无法从 DBNull 强制转换为其他类型。”
我可以在列中插入一个 id 值,但是当我将我的 dt 更新到我的数据库时,它不会产生错误,因为我无法知道最后一行是创建的吗?或者是吗?
例如,假设在我的数据表中,最后一个 ID 是 50,但是在数据库上,你之前用 id “51”创建了一条记录,但后来删除了它,如果我根据我的 dt 信息插入 51,它会给出错误吗?
//// INSERT ROW
DataRow newRow = Tabla_Cods_Proy.NewRow();
newRow["Lazos"] = textBox1.Text ;
newRow["Asociaciones"] = textBox2.Text;
Tabla_Cods_Proy.Rows.Add(newRow);
MessageBox.Show("Enhorabuena!");
//CHECK ID's
for (int i = 0; i < Tabla_Cods_Proy.Rows.Count; i++)
{
if (Tabla_Cods_Proy.Rows[i].RowState != DataRowState.Deleted)
{
if (Tabla_Cods_Proy.Rows[i]["Lazos_asociados"].ToString() == "")
{
listBox7.Items.Add(Tabla_Cods_Proy.Rows[i]["Cod_Cliente"]);
listBox8.Items.Add(Tabla_Cods_Proy.Rows[i]["Cod_Inelectra"]);
ID_Cods_Proy_Sin_Asociar.Add(Convert.ToInt32(Tabla_Cods_Proy.Rows[i]["ID"]));
}
else
{
listBox3.Items.Add(Tabla_Cods_Proy.Rows[i]["Cod_Cliente"]);
listBox4.Items.Add(Tabla_Cods_Proy.Rows[i]["Cod_Inelectra"]);
ID_Cods_Proy_Asociados.Add(Convert.ToInt32(Tabla_Cods_Proy.Rows[i]["ID"]));
}
}