Witam,
od jakiegoś czasu programuję aplikację komunikującą się z bazką Accessa.
Zazwyczaj tak programowałem kwerendy aktualizujące lub wstawiające nowe rekordy, że nie generowałem takiego wyjątku. Od pewnego czasu zmieniłem trochę podejście do implementacji DB i w rezultacie otrzymuję wyjątek przy wywołaniu kwerendy aktualizującej: parametr [param] nie posiada wartości domyślnej.
Wynika to z tego, że próbuję wstawić pusty string ("") do kolumny typu Tekst a access nie chce tego przyjąć.
Trochę inny wyjątek otrzymuję, jak próbuję wstawić pusty string do kolumny typu Numer (coś w stylu Type mistatch).
Czy znacie jakieś sposoby aby wstawić nulla/pusty string do kolumn tych 2 typów?
Kod, z którego korzystam:
protected void ExecuteNonQuery(QueryCommandType qct, string procedureName, params string[] queryParams)
{
OleDbCommand dbCmd = new OleDbCommand();
dbCmd.Connection = _DbConn;
dbCmd.CommandText = procedureName;
dbCmd.CommandType = CommandType.StoredProcedure;
int counter = queryParams.Length;
if (counter % 2 != 0)
{
throw new ProcedureArgumentException("Wrong parameters count: " + counter, procedureName, queryParams);
}
for (int i = 0; i < counter; i++)
{
string parm = queryParams[i];
string val = queryParams[++i];
if (val == "") val = null;
dbCmd.Parameters.AddWithValue(parm, val);
}
int result = dbCmd.ExecuteNonQuery();
if (result == 1) return;
else
{
if (qct == QueryCommandType.InsertCommand)
throw new InvalidCommandResultException("Insert command has affected " + result + " rows.", procedureName);
}
}