我从一段C#.net代码调用SQL存储过程:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
其中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;
我现在需要将另外两个参数传递给这个存储过程(两者都是SqlDateTime
类型),在这种情况下它们将 NULL 。
谢谢,
在
答案 0 :(得分:79)
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;
...然后复制第二个。
答案 1 :(得分:25)
使用DBNull.Value
更好的是,使存储过程参数的默认值为NULL。如果参数有时是有效的DateTime对象,则使用Nullable<DateTime>
参数
答案 2 :(得分:9)
您可以将DBNull.Value
传递给参数的.Value属性:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;
显然只需调整两个DateTime参数 - 只显示如何在此处使用DBNull.Value
属性值。
马克
答案 3 :(得分:7)
如果它为null,我使用一种方法转换为DBNull
// Converts to DBNull, if Null
public static object ToDBNull(object value)
{
if (null != value)
return value;
return DBNull.Value;
}
因此,在设置参数时,只需调用函数
即可 sqlComm.Parameters.Add(new SqlParameter("@NoteNo", LibraryHelper.ToDBNull(NoteNo)));
这将确保任何空值,更改为DBNull.Value,否则它将保持不变。
答案 4 :(得分:6)
旧问题,但这是一种创建可以为空的参数的相当简洁的方法:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
如果request.Body有值,则使用它的值。如果它为null,则使用DbNull.Value。
答案 5 :(得分:1)
cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" } );
答案 6 :(得分:0)
SQLParam = cmd.Parameters.Add("@RetailerID", SqlDbType.Int, 4)
If p_RetailerID.Length = 0 Or p_RetailerID = "0" Then
SQLParam.Value = DBNull.Value
Else
SQLParam.Value = p_RetailerID
End If
答案 7 :(得分:0)
假设SQL存储过程中参数的名称为“Id”,并且用于调用数据库存储过程的C#函数是类型int?
的名称。鉴于此,以下可能会解决您的问题:
public void storedProcedureName(Nullable<int> id, string name)
{
var idParameter = id.HasValue ?
new SqlParameter("Id", id) :
new SqlParameter { ParameterName = "Id", SqlDbType = SqlDbType.Int, Value = DBNull.Value };
// to be continued...