ObjectDataSource将空字符串转换为01/01/01

时间:2010-04-08 15:27:18

标签: .net

我正在将项目转换为使用ObjectDataSources而不是SqlDataSources。我正在使用文本框来输入日期。当使用SqlDataSource将这些值留空时,发送到存储过程的值为null,这样我就可以从没有指定日期的查询中获得正确的结果。

使用ObjectDataSource,日期文本框的空白输入将转换为01/01/0001 00:00:00,这对于查询是不可接受的。

当文本框留空时,任何人都知道如何在我的ObjectDataSource上为此参数接收空值?

thanksHi

2 个答案:

答案 0 :(得分:0)

我找到了一种方法,通过检查内联和替换为null。感觉有点hacky,但它工作正常,我找不到任何其他建议。如果你有更好的主意,请告诉我!

cmd.Parameters.AddWithValue("@ABCId", objectType == "AbcId" ? objectId.ToString() : null);
            cmd.Parameters.AddWithValue("@CounterpartyId", objectType == "CounterpartyId" ? objectId.ToString() : null);
            cmd.Parameters.AddWithValue("@FromDate", fromDate == DateTime.MinValue ? null : fromDate.ToLongDateString());
            cmd.Parameters.AddWithValue("@ToDate", toDate == DateTime.MinValue ? null : toDate.ToLongDateString());
            cmd.Parameters.AddWithValue("@RelationshipId", objectType == "RelId" ? objectId.ToString() : null);
            cmd.Parameters.AddWithValue("@ShowNonTradePayments", showNonTradePayments);
            cmd.Parameters.AddWithValue("@ShowTradePayments", showTradePayments);

答案 1 :(得分:0)

我最终将“01/01/1900”作为我的“空”。不是书的解决方案,但实际上它并没有打扰我们。我们有自己的转换类,它可以透明地捕获这些标记值,因此我们可以在大多数情况下忘记这个问题。 在HQL / SQL查询中,我们只要求大于01/01/1901(非空)的值或小于01/01/1901(null)的值,而不是要求非空值。