【问题标题】:Inserting DateTime into Sql Server 2005将日期时间插入 Sql Server 2005
【发布时间】:2009-08-16 07:39:09
【问题描述】:

我在将日期时间格式变量插入 Sql Server 2005 数据库时遇到问题。 日期时间格式为 dd.MM.yyyy

conn.Open();

                string conString = "SET DATEFORMAT DMY INSERT INTO AmortPlanT (InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue) Values (@IIndex,'@StartDate','@Maturity',@IRate,@CouponPerYear,@parValue)";

                using (SqlCommand myCommand = new SqlCommand(conString, conn))
                {
                    myCommand.CommandType = CommandType.Text;
                    myCommand.Parameters.Add("@IIndex", SqlDbType.Int).Value = investmentIndex;
                    myCommand.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;
                    myCommand.Parameters.Add("@Maturity", SqlDbType.DateTime).Value = maturity;
                    myCommand.Parameters.Add("@IRate", SqlDbType.Float).Value = iRate;
                    myCommand.Parameters.Add("@CouponPerYear", SqlDbType.Int).Value = coupPerYear;
                    myCommand.Parameters.Add("@parValue", SqlDbType.Float).Value = parValue;

                    myCommand.ExecuteNonQuery();

                }

StartDate 和 Maturity 是我从 dateTimePicker.Value 获得的 DateTime 变量。

我总是得到错误:

从字符串转换日期时间时转换失败。

感谢您的帮助。

【问题讨论】:

    标签: c# sql-server-2005 datetime


    【解决方案1】:

    你不应该把你的参数放在引号里..这是正确的查询..

    values 子句中的'@StartDate' 是错误的,它应该只是@StartDate...如下所述...

        conn.Open();
        string conString = "SET DATEFORMAT DMY INSERT INTO AmortPlanT 
    (InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue) Values 
    (@IIndex,@StartDate,@Maturity,@IRate,@CouponPerYear,@parValue)";                
    using (SqlCommand myCommand = new SqlCommand(conString, conn))
       {                    
        myCommand.CommandType = CommandType.Text;                    
        myCommand.Parameters.Add("@IIndex", SqlDbType.Int).Value = investmentIndex;                    
        myCommand.Parameters.Add("@StartDate", SqlDbType.DateTime).Value = startDate;                    
        myCommand.Parameters.Add("@Maturity", SqlDbType.DateTime).Value = maturity;                    
        myCommand.Parameters.Add("@IRate", SqlDbType.Float).Value = iRate;                    myCommand.Parameters.Add("@CouponPerYear", SqlDbType.Int).Value = coupPerYear;                    
    myCommand.Parameters.Add("@parValue", SqlDbType.Float).Value = parValue;                    myCommand.ExecuteNonQuery();                
    }
    

    【讨论】:

      【解决方案2】:

      问题是你在考虑字符串...

      日期时间格式为 dd.MM.yyyy

      不,不是; DateTime 的格式(当作为参数传递时)实际上只是一个二进制数字;-p(startDate 应该是 DateTime - 而不是 string)。

      当你使用参数时,你不包括字符串标记(')——否则你的意思是“字符串'@name'”,而不是“参数@name中保存的字符串”;尝试删除它们:

      string conString = @"
      SET DATEFORMAT DMY INSERT INTO AmortPlanT (InvestmentID,StartDate,Maturity,IRate,CoupPerYear,parValue)
      VALUES (@IIndex,@StartDate,@Maturity,@IRate,@CouponPerYear,@parValue)";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 2011-09-06
        • 2014-09-05
        相关资源
        最近更新 更多