我有一个我存储的字符串值name
,如
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = string.IsNullOrEmpty(name) ? (object)DBNull.Value : name;
我有一个DateTime
值date
。如何像上面的方法一样存储这个日期值。我的日期值数据类型是日期。我试过这个
cmd.Parameters.Add("@fromdate", SqlDbType.date).Value = string.IsNullOrEmpty(fromdate) ? (object)DBNull.Value : fromdate;
我应该添加string.IsNullOrEmpty
的内容。
我的存储过程代码
ALTER PROCEDURE [dbo].[dbo_sample]
(
@name varchar (50),
@Fromdate date
)
答案 0 :(得分:0)
您需要使用其他数据类型。与数据库目标列中的相同。
或者
<强>日期时间即可。日期和时间数据的范围从1753年1月1日到9999年12月31日,精确到3.33毫秒。
或
<强> DATETIME2 即可。日期和时间数据。日期值范围是从公元1月1日到公元9999年12月31日。时间值范围为00:00:00到23:59:59.9999999,精度为100纳秒。
答案 1 :(得分:0)
cmd.Parameters.Add(new SqlParameter
{
ParameterName = "@Fromdate",
SqlDbType = SqlDbType.Date,
Value = fromdate == default(DateTime) ? fromdate : new DateTime?() });
答案 2 :(得分:0)
在C#中,日期时间总是一个值。因此,您必须针对默认值进行测试,而不是null
if (fromdate != default(DateTime))
{
parameters.Add(
new SqlParameter {
ParameterName = "@Fromdate",
SqlDbType = SqlDbType.Date,
Value = fromdate});
}
else
{
parameters.Add(
new SqlParameter {
ParameterName = "@Fromdate",
SqlDbType = SqlDbType.Date,
Value = null});
}
但是如果用nodate处理变量,你应该使用DateTime吗?并使用可空的!
这是我在制作中使用的方法和方便的助手方法:
public static SqlParameter CreateParam(
string paramName,
object value,
SqlDbType sqlDbType)
{
SqlParameter p = new SqlParameter(paramName, sqlDbType)
{
Value = value ?? DBNull.Value,
};
return p;
}
及其用途:
cmd.Parameters.Add(Helpers.CreateParam(
"@Fromdate",
fromdate.HasValue ? fromdate.Value : null,
SqlDbType.DateTime));