ストアドプロシージャを使用してテーブルを作成しています。テーブルは名前の真ん中の頭文字に「null」を許可しますが、次のエラーメッセージが表示されます。C#ASP.Net Parameters.AddWithValueパラメータの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();
}
53人のパラメータを渡していますが、その多くはnullでもかまいません。 IF文で各代入をラップすることなくDBNull.Valueをどのように動的に設定できますか? – Susan
ストアドプロシージャを変更することが可能な場合は、nullにできるparamateresを変更し、ストアドプロシージャ宣言でオプションにします。それが最も柔軟な解決策です。これが不可能な場合は、 'SqlCommandBuilder.DeriveParameters(command);'を使用して、ループ内のそれぞれに対して 'DBNull.Value'を設定することができます。そしてあなたが望むものを割り当てます。 – Marcin
http://stackoverflow.com/a/9518215/8479へのコメントを見る: 'cmd.ParametersAddWithValue(" @MinInitial "、(オブジェクト)yourVal?DBNull.Value);'を使うか、 'AddParamWithValueOrNull( ) ' – Rory