在sql server中将null字符串的默认值更改为datetime转换

时间:2012-04-25 09:18:11

标签: sql-server asp.net-mvc

我有一个网页,有几个文本框只有在某些条件下才能看到。这些文本框绑定到日历扩展程序。但是,只要不可见,这些就会将空字符串传递给数据库。它们在表中的相应数据类型为datetime。存储这些空字符串时,它们将转换为1/1/1900 12:00:00 AM。我怎样才能在这里存储空值?

我是否需要将数据类型更改为其他内容?

我正在使用datetime因为我需要稍后执行一些比较操作。

相关代码在这里。

public class Asset
{ 

public string dbStatus { get; set; }
public string wtyEndDate { get; set; }
public string amcEndDate { get; set; }


 public Asset()
 {
    dbStatus = default(String);
    wtyEndDate = default(String);
    amcEndDate = default(String);
 }
}

 protected void btnSaveAsset_Click(object sender, EventArgs e)
  { 
    Asset a = new Asset();
    a.wtyEndDate = txtWtyEndDate.Text;
    a.amcEndDate = txtAmcEndDate.Text;
    string msg = "";
    if (a.dbStatus == "INSERT")
    {
      try
       {
           msg = (ab.EXE_Assets_Master(a).Rows.Count>0) ? "Record Inserted"; : "Error"
        }
        catch (Exception)
        {
            msg = "Record with this service tag already exists in the database";
        }
    }
 }

 protected DataTable _EXE_Asset_Details(Asset a)
  {
    Parameters.Clear();

    AddParameter("@wtyEndDate", a.wtyEndDate);
    AddParameter("@amcEndDate",a.amcEndDate);
    AddParameter("@DBStatus", a.dbStatus);

    return ExecuteDataSet("[Asset_Details]").Tables[0];
    }

// Asset_Details

CREATE PROCEDURE [Asset_Details]
@wtyEndDate datetime = NULL, 
@amcEndDate datetime =null, 
@dbStatus nvarchar(50)

AS
IF(@DBStatus='INSERT')
BEGIN
 INSERT INTO [assetsMaster]
       ([warrantyEndDate],[amcEndDate])
  VALUES
       ( @wtyEndDate,@amcEndDate)
  SELECT @@rowcount

END

1 个答案:

答案 0 :(得分:0)

如果参数中包含数据,则只添加可选的DateTime参数。

例如:

if(!string.IsNullOrWhiteSpace(a.wtyEndDate))
{
    AddParameter("@wtyEndDate", a.wtyEndDate);
}