通过创建datetime传递null到sql server 2012 datetime的问题?变量到我的存储过程

本文关键字:datetime 问题 变量 存储过程 我的 2012 sql 创建 传递 null server | 更新日期: 2023-09-27 18:12:09

这是我的业务对象层

public class Servicetransactionbol
{
    public Servicetransactionbol()
    {
        st_id = default(int);
        st_startdate = default(DateTime);
        st_enddate = default(DateTime);
    }
       private int st_id;
    private DateTime st_startdate;
    private DateTime st_enddate;
     public int STid
    {
        get { return this.st_id; }
        set { this.st_id = value; }
    }
    public DateTime STstartdate
    {
        get { return this.st_startdate; }
        set { this.st_startdate = value; }
    }
    public DateTime STenddate
    {
        get { return this.st_enddate; }
        set { this.st_enddate = value; }
    }
}

这是我的业务访问层

public class servicetransactionbal
{
    servicetransactiondal servicetransactionDAL = new servicetransactiondal();
    public void insertTransaction(Servicetransactionbol servicetransactionBOL)
    {
        try
        {
            servicetransactionDAL.Inserttransaction(servicetransactionBOL);
        }
        catch(Exception ex)
        {
            throw ex;
        }
        finally
        {
        }
    }
}

这是我的数据访问层

public class servicetransactiondal
{
   public void Inserttransaction(Servicetransactionbol servicetransactionBOL)
   {
       try
       {
           Database db = DatabaseFactory.CreateDatabase("GeniusStockTraders");
           DbCommand dbc = db.GetStoredProcCommand("Sproc_service_transaction");              
           db.AddOutParameter(dbc, "srvid", DbType.Int32, servicetransactionBOL.STid);
           db.AddInParameter(dbc, "srv_startdate", DbType.DateTime, servicetransactionBOL.STstartdate);
           db.AddInParameter(dbc, "srv_enddate", DbType.DateTime, servicetransactionBOL.STenddate);
           db.AddInParameter(dbc, "ttype", DbType.String, "insert_transaction");
           db.ExecuteNonQuery(dbc);
           dbc.Dispose();
       }
       catch (Exception ex)
       {
           throw ex;
       }
       finally
       {
       }
   }
 }

最后这是我在

后面的代码
    SqlDateTime? enddate;
    protected void btn_Save_Click(object sender, EventArgs e)
    {
        try
        {
            Database db = DatabaseFactory.CreateDatabase("GeniusStockTraders");
            servicetransactionBOL.STid = default(int);
            servicetransactionBOL.STscript = txt_script.Text;
            servicetransactionBOL.STstartdate = Convert.ToDateTime(txt_startdate.Text);
            if (string.IsNullOrEmpty(txt_enddate.Text))
            {
                enddate = SqlDateTime.Null;
                servicetransactionBOL.STenddate = (DateTime)enddate;
            }
            else
            {
                servicetransactionBOL.STenddate = Convert.ToDateTime(txt_enddate.Text);
            }

有了这个代码,我能够插入datetime的最小值,当我的文本字段为空,但我想插入NULL,当我的文本字段为空。我试过把datetime改成datetime?在我的业务对象层,然后我能够插入NULL值到我的enddate在LOCALHOST,但当我上传相同的文件在线它抛出一个异常

方法未找到:'System. 'datetime GeniusstocktradersBOL.ServeicetransactionBOL.get_STenddate () .

请帮我解决这个问题。

谢谢

通过创建datetime传递null到sql server 2012 datetime的问题?变量到我的存储过程

不发送Valuenull:的参数。如果你得到关于变量/参数没有定义的问题,你必须用DBNull.Value代替null。是的,这很烦人。例如:

DateTime? someValue = ... // could be null
db.AddInParameter(dbc, "some_name", DbType.DateTime,
    (object)someValue ?? DBNull.Value);

请注意,在您提供的示例中,两个日期时间都是DateTime,而不是DateTime?,但它适用于更一般的情况。

:

方法未找到:'System. 'datetime GeniusstocktradersBOL.ServeicetransactionBOL.get_STenddate () .

这与null值无关,只是表明您没有完全构建/部署dll,即服务器有一个版本的dll 没有该属性访问器

使用case语句插入when Date=MIN('1/1/1900') then NULL,传递'1/1/1900'作为"Empty"值

就像OP说的那样,把这个变成了一个答案