В C# Параметры ASP.Net .AddWithValue отклонение значения null для параметра
Я заполнение таблицы с помощью хранимой процедуры. Таблица позволяет "null" для среднего начального имени, но я получаю следующее сообщение об ошибке:
процедура или функция 'uspInsertPersonalAccountApplication' ожидает параметр '@MiddleInitial', который не был предоставлен.
спасибо заранее!
public void ProcessForm(string[] InputData)
{
string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["AssociatedBankConnectionString"].ToString();
SqlConnection conn = new SqlConnection(ConnString);
SqlCommand cmd = new SqlCommand("uspInsertPersonalAccountApplication", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AccountType", "Savings");
cmd.Parameters.AddWithValue("@AccountSubType", "Savings");
cmd.Parameters.AddWithValue("@ExistingCustomer","No");
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
7 ответов
есть два варианта:
изменить хранимую процедуру и сделать @MiddleInitial param необязательно (который в настоящее время не является необязательным, поэтому возникает ошибка)
@MiddleInitial nvarchar(10) = NULL
или добавьте следующую строку в ваш код:
cmd.Parameters.AddWithValue("@MiddleInitial", null);
вы можете добавить в проект и использовать следующий метод расширения:
public static SqlParameter AddWithValueSafe(this SqlParameterCollection parameters, string parameterName, object value)
{
return parameters.AddWithValue(parameterName, value ?? DBNull.Value);
}
вам нужно объявить обо всем-даже если это null.
использовать значение dbnull.Значение на MiddleInitial
.
cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value);
Я создал метод расширения для борьбы с этой проблемой. Предложение Марцина также стоит рассмотреть, если вы можете обновить хранимую процедуру.
cmd.Parameters.AddString("@MyParamName", myValue);
public static class SQLExtension
{
public static void AddString(this SqlParameterCollection collection, string parameterName, string value)
{
collection.AddWithValue(parameterName, ((object)value) ?? DBNull.Value);
}
}
добавьте параметр для MiddleInitial также с нулевым значением
public void ProcessForm(string[] InputData)
{
string ConnString = System.Configuration.ConfigurationManager.ConnectionStrings["AssociatedBankConnectionString"].ToString();
SqlConnection conn = new SqlConnection(ConnString);
SqlCommand cmd = new SqlCommand("uspInsertPersonalAccountApplication", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AccountType", "Savings");
cmd.Parameters.AddWithValue("@AccountSubType", "Savings");
cmd.Parameters.AddWithValue("@ExistingCustomer","No");
cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}