Почему ExecuteNonQuery перехватывает исключение {"ошибка проверки для столбца \"ORGTABLE\".\"FIKEYID\", значение \"* null *\""}
string stValuesPlaceHolder = "@p0";
for (int iii = 1; iii < liststFieldValuesNoKeyId.Count; iii++)
stValuesPlaceHolder += ", @p" + (iii).ToString();
FbTransaction fbTransaction = fbConn.BeginTransaction();
FbCommand fbCmd = new FbCommand("INSERT INTO " + stTableName + "(" + stFieldNamesNoKeyId + ") VALUES ( " + stValuesPlaceHolder + " )", fbConn, fbTransaction);
for (int iii = 0; iii < liststFieldValuesNoKeyId.Count; iii++) {
string stPlaceHolder = "@p" + (iii).ToString();
string stValue = liststFieldValuesNoKeyId[iii];
fbCmd.Parameters.AddWithValue(stPlaceHolder, stValue);
}
fbCmd.ExecuteNonQuery();
fbTransaction.Commit();
stTableName — это OrgTable.
Названия полей:
fstPriority, fstInfo, fstDateCreated, fstDateModified, fiKeyID.
Определения полей:
fstPriority VARCHAR(30), fstInfo VARCHAR(100), fstDateCreated VARCHAR(30), fstDateModified VARCHAR(30), fiKeyID INTEGER PRIMARY KEY
В этом разделе кода:
stFieldNamesNoKeyId = "fstPriority, fstInfo, fstDateCreated, fstDateModified".
stValuesPlaceHolder = "@p0, @p1, @p2, @p3"
Четыре fbCmd.Parameters.AddWithValue:
stPlaceHolder = "@p0" ... stValue = "1st value";
stPlaceHolder = "@p1" ... stValue = "2nd value";
stPlaceHolder = "@p2" ... stValue = "3rd value";
stPlaceHolder = "@p3" ... stValue = "4th value";
Я не добавлял значение для fiKeyID, так как это ПЕРВИЧНЫЙ КЛЮЧ.
null
, что недопустимо, поэтому в этом случае исключение является правильным и ожидаемым. Кстати: я предполагаю, что вы имеете в виду, почему ExecuteNonQuery выдает исключение. - person Mark Rotteveel   schedule 23.03.2017