Irf*_*rfy 63 c# sql sql-server stored-procedures
我从一段C#.net代码调用SQL存储过程:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
Run Code Online (Sandbox Code Playgroud)
其中sqlParameters
变量被定义为:
SqlParameter[] sqlParameters = new SqlParameter[SQL_NUMBER_PARAMETERS];
Log.Logger.Debug(string.Format("Running proc: {0} ", STORED_PROC_NAME));
SqlParameters[0] = new SqlParameter("fieldID", SqlDbType.BigInt );
SqlParameters[0].Value = fieldID;
SqlParameters[0].Direction = ParameterDirection.Input;
Run Code Online (Sandbox Code Playgroud)
我现在需要将另外两个参数传递给这个存储过程(两者都是类型SqlDateTime
),在这种情况下它们将变为NULL.
谢谢,
在
Jus*_*ner 80
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;
Run Code Online (Sandbox Code Playgroud)
...然后复制第二个.
Dan*_*plo 26
使用DBNull.Value
更好,使存储过程参数的默认值为NULL.Nullable<DateTime>
如果参数有时是有效的DateTime对象,请使用参数
您可以将其传递给DBNull.Value
参数的.Value属性:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)
只需调整两个DateTime参数,只需显示如何在DBNull.Value
此处使用属性值.
渣
如果它为null,我使用一个方法转换为DBNull
// Converts to DBNull, if Null
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
Run Code Online (Sandbox Code Playgroud)
因此在设置参数时,只需调用该函数即可
sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));
Run Code Online (Sandbox Code Playgroud)
这将确保任何空值,更改为DBNull.Value,否则它将保持不变.
老问题,但这是一个相当干净的方法来创建一个可以为null的参数:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
如果request.Body有值,则使用它的值.如果它为null,则使用DbNull.Value.