C # ASP.Net Parameters.AddWithValue отклоняет нулевое значение для параметра - PullRequest
7 голосов
/ 01 марта 2012

Я заполняю таблицы с помощью хранимой процедуры. Таблица допускает нулевое значение для середины имени, но я получаю следующее сообщение об ошибке:

Процедура или функция «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 ]

5 голосов
/ 01 марта 2012

Вы можете добавить в проект и использовать следующий метод расширения:

public static SqlParameter AddWithValueSafe(this SqlParameterCollection parameters, string parameterName, object value)
{
    return parameters.AddWithValue(parameterName, value ?? DBNull.Value);
}
4 голосов
/ 01 марта 2012

Здесь есть два варианта:

Изменить хранимую процедуру и сделать необязательным параметр @ MiddleInitial (который в настоящее время не является обязательным, поэтому выдается ошибка)

@MiddleInitial nvarchar(10) = NULL

Или добавьте следующую строку в ваш код:

cmd.Parameters.AddWithValue("@MiddleInitial", null);
3 голосов
/ 01 марта 2012

Попробуйте ввести DBNull.Value вместо null.

1 голос
/ 02 февраля 2014

Я создал метод расширения для решения этой проблемы.Предложение Марцина также стоит рассмотреть, если вы можете обновить хранимую процедуру.

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);
    }
}
1 голос
/ 01 марта 2012

Вам нужно объявить все, даже если оно пустое.

Использовать DBNull.Value для MiddleInitial.

cmd.Parameters.AddWithValue("@MiddleInitial",DBNull.Value);
0 голосов
/ 01 марта 2012

эй, вы должны установить с процедурой хранения

@MiddleInitial varhcar(8) = null
0 голосов
/ 01 марта 2012

добавить параметр для MiddleInitial также со значением Null

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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...