私はストアドプロシージャを呼び出すSQLコマンドに、複数のフィールド値を含む型付きオブジェクトを渡しました。デバッグでは、各フィールドに値があり、どれもnullでないことがわかります。ExecuteNonQueryでnullオブジェクトフィールドの値をデバッグするには?
しかし、db.ExecuteNonQuery
コールをさらにデバッグすると、アプリケーションフィールドがNULLであることを示すSQL例外が発生します。このコマンドを実行する前に、nullではなく文字列値を持っていますが。
通常のデバッグ手順を確認しましたが、モデルフィールドのタイプはDbCommand
のタイプと一致しています。また、期待通りに文字列値が設定されたクエリを実行する前に、escalation.Application
の値を確認しました。
質問:フィールド値はExecuteNonQuery
にヌルとして評価される理由
、誰もが知っていますか?
コード:
DALクラス -
public bool InsertWebReq(Escalation escalation) { Database db = null; string sqlCommand = ""; try { DatabaseProviderFactory factory = new DatabaseProviderFactory(); db = factory.Create("NOTIFICATION"); sqlCommand = "CREATE_ESCALATION"; using (DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand)) { db.AddInParameter(dbCommand, "Application", DbType.String, escalation.Application); db.AddInParameter(dbCommand, "EM", DbType.String, escalation.EM); db.AddInParameter(dbCommand, "EscalationActions", DbType.String, escalation.EscalationActions); db.AddInParameter(dbCommand, "ProblemStatement", DbType.String, escalation.ProblemStatement); db.AddInParameter(dbCommand, "status", DbType.String, escalation.status); db.AddInParameter(dbCommand, "UpdatedBy", DbType.String, escalation.UpdatedBy); db.AddInParameter(dbCommand, "UpdatedTime", DbType.DateTime, escalation.UpdatedTime); db.AddInParameter(dbCommand, "Impact", DbType.String, escalation.Impact); db.ExecuteNonQuery(dbCommand); return true; } } catch (SqlException ex) { //Log the SQL specific errors for (int i = 0; i < ex.Errors.Count; i++) { StringBuilder errorMessages = new StringBuilder(); errorMessages.Append("Index #" + i + "\n" + "Message: " + ex.Errors[i].Message + "\n" + "LineNumber: " + ex.Errors[i].LineNumber + "\n" + "Source: " + ex.Errors[i].Source + "\n" + "Procedure: " + ex.Errors[i].Procedure + "\n"); } MyLogger.FileLogger.ErrorFormat("{0} - {1}", sqlCommand, ex.Message); return false; } }
モデル - アプリケーションリストの
public partial class Escalation { public int ID { get; set; } public string Application { get; set; } public string EM { get; set; } public string status { get; set; } public string ProblemStatement { get; set; } public string Impact { get; set; } public string EscalationActions { get; set; } public System.DateTime UpdatedTime { get; set; } public string UpdatedBy { get; set; } }
HTML要素 -
<div class="form-adjacent"> <label class="col-md-3 control-label" for="App">App</label> <div class="col-md-8"> <select id="App" name="Application" onchange="" class="form-control"> <option value="SAP">SAP</option> <option value="EME">EME</option> </select> </div> </div>
ストアドプロシージャの外観(create_escalation)は何ですか? AddInParametersとExecuteNonQueryを正しく使用しているようですが、実際に値をプロシージャに渡す前に、アプリケーションの値を取得していることはすでに述べています。また、アプリケーションがNULLになるという正確なエラーは何ですか? – Dresden
ストアドプロシージャコードを提供する場合は、正解を得るために十分な情報が表示されていることを確認してください。また、機密情報を削除してください。 – PhilDulac