Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过创建datetime将null传递到sql server 2012 datetime时出现问题?变量到我的存储过程_C#_Sql Server_Datetime - Fatal编程技术网

C# 通过创建datetime将null传递到sql server 2012 datetime时出现问题?变量到我的存储过程

C# 通过创建datetime将null传递到sql server 2012 datetime时出现问题?变量到我的存储过程,c#,sql-server,datetime,C#,Sql Server,Datetime,这是我的业务对象层 public class Servicetransactionbol { public Servicetransactionbol() { st_id = default(int); st_startdate = default(DateTime); st_enddate = default(DateTime); } private int st_id; private DateTi

这是我的业务对象层

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
       {

       }

   }
 }
这是我的数据访问层

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?在我的业务对象层中,我可以在LOCALHOST中将NULL值插入到我的enddate中,但当我在线上传相同的文件时,会引发异常

找不到方法:“System.datetime GeniusTockTradersBol.ServeItemTransactionBol.get_STenddate()

请帮我解决这个问题


谢谢

当日期=分钟('1/1/1900')时,在insert
中使用case语句,然后为空
,将
'1/1/1900'
传递为“空”值


将此转化为OP所说的答案,解决了问题。

不发送值为
null
:的
参数。如果您遇到有关未定义的变量/参数的问题,则必须将
null
替换为
DBNull.Value
。是的,这很烦人。例如:

DateTime? someValue = ... // could be null
db.AddInParameter(dbc, "some_name", DbType.DateTime,
    (object)someValue ?? DBNull.Value);
请注意,在您提供的示例中,两个日期时间都是
DateTime
,而不是
DateTime?
,但它适用于更一般的情况

至于:

找不到方法:“System.datetime GeniusTockTradersBol.ServeItemTransactionBol.get_STenddate()


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

您的DateTime列是否在数据库表中标记为允许null?您的数据库服务器版本不同。。生产和开发服务器变量在插入
中使用一个case语句,当Date=MIN('1/1/1900'),然后为NULL,将
'1/1/1900'
传递为“空”value@GregC是的,我在我的模式中将我的datetime列标记为allow null。如果您得到“method not found”,则可能是部署问题。确保正在部署为此项目编译的所有程序集。另外,并不是说C#是一种区分大小写的语言,而且你在这里发布的内容的大小写不一致;如果您的意思是null:发送null。没有必要发明额外的哨兵值。