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

我从一个C#.net代码调用SQL存储过程:

SqlHelper.ExecuteDataset(sqlConnection, CommandType.StoredProcedure, STORED_PROC_NAME, sqlParameters); 

sqlParametersvariables的定义如下:

  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; 

我现在需要传入另外两个参数到这个存储过程(都是SqlDateTimetypes),在这种情况下这些参数都是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...