如何从C#.net代码传递一个空variables到SQL存储过程
我从一个C#.net代码调用SQL存储过程:
SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters);
sqlParameters
variables的定义如下:
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
types),在这种情况下这些参数都是NULL 。
谢谢,
在
SqlParameters[1] = new SqlParameter("Date1", SqlDbType.SqlDateTime); SqlParameters[1].Value = DBNull.Value; SqlParameters[1].Direction = ParameterDirection.Input;
…然后复制第二个。
使用DBNull.Value
更好的是,使您的存储过程参数的默认值为NULL。 或者,如果参数有时是有效的DateTime对象,则使用Nullable<DateTime>
参数
您可以将DBNull.Value
传递给参数的.Value属性:
SqlParameters[0] = new SqlParameter("LedgerID", SqlDbType.BigInt ); SqlParameters[0].Value = DBNull.Value;
只要调整你的两个DateTime参数,显然 – 只是在这里显示如何使用DBNull.Value
属性值。
渣子
如果它是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,否则它将保持不变。
旧的问题,但这是一个相当干净的方式来创build一个可为空的参数:
new SqlParameter("@note", (object) request.Body ?? DBNull.Value);
如果request.Body有一个值,那么它的值被使用。 如果它为空,则使用DbNull.Value。
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
尝试这个! 语法更less的行,甚至更紧凑! 不要忘了添加你想添加的属性,这种方法!
cmd.Parameters.Add(new SqlParameter{SqlValue=(object)username??DBNull.Value,ParameterName="user" } );
假设你的SQL存储过程中参数的名字是“Id”,你用来调用数据库存储过程的C#函数是int?
types的名字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...