如何从 C # .net 代码传递一个空变量到 SQL 存储过程

我从一段 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;

现在我需要向这个 Stored Proc 传入另外两个参数(两个参数都是 SqlDateTime类型) ,在本例中它们将传递给 无效

谢谢,

进去

160564 次浏览

可以将 DBNull.Value传递给参数的.Value 属性:

    SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt );
SqlParameters[0].Value = DBNull.Value;

显然,只需调整两个 DateTime 参数即可——这里只是展示如何使用 DBNull.Value属性值。

马克

SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime);
SqlParameters[1].Value = DBNull.Value;
SqlParameters[1].Direction = ParameterDirection.Input;

然后再复印一份。

使用 DBNull.Value更好的做法是,将存储过程参数的缺省值设置为 NULL。如果参数有时是有效的 DateTime 对象,则使用 Nullable<DateTime>参数

    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

如果 DBNull 为 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,否则它将保持不变。

试试这个!语法更少的行,甚至更紧凑!不要忘记用这种方法添加您想要添加的属性!

cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" }  );

假设 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...

这是个老问题,但是这里有一个相当干净的方法来创建一个可以为空的参数:

new SqlParameter("@note", (object) request.Body ?? DBNull.Value);

如果 request. Body 有值,则使用它的值。如果它为 null,则使用 DbNull.Value。