アクセスデータベースから作成されたoledbdataadapterで満たされたデータテーブルでいくつかの作業を行っていました。そして私はこのエラーに遭遇しました:
私のテーブルは次の構造を持っていることがわかります:ID-> autonumber(PK)
lazos_> text
Asociaciones-> text
データテーブルに入力すると、すべての値が問題なく渡されます。「行の挿入」の部分に示されているように、新しい行を挿入します。
私のpkは行の作成時に「自動番号」を挿入すると仮定してこれを行いますが、行をループトルートすると、オブジェクトを含む「無効なキャスト例外」がDBNullから他のタイプにキャストできないため、明らかにそれは行われていません。 。」
列にid値を挿入できますが、データベースのdtを更新すると、最後の行が作成されたかどうかを知る方法がないため、エラーが発生しませんか?
たとえば、私のデータテーブルで最後のIDが50であるとしましょう。しかし、データベースでyは以前に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"]));
}
}