В 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);
}

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


вам нужно объявить обо всем-даже если это 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();
    }

Эй вы должны установить процедуру магазина

@MiddleInitial varhcar(8) = null