如何通过字符串在数据库中存储日期?

时间:2017-05-25 09:19:43

标签: c# ado.net

我想在我的数据库中存储日期。我在web.config中添加了两个键值。我在后面的代码中使用keyFinancialYrkeyFinancialQtr将这些值存储在我的数据库中,作为财务年度和财务季度的两列。我可以在我的数据库中存储keyFinancialQtr值。但是当我尝试存储keyFinancialYr值时,它会给出错误。像这样"类型' System.Data.EvaluateException'的例外。发生在System.Data.dll中但未在用户代码中处理

其他信息:无法转换价值' -2018'输入:System.DateTime。"

web.config -

<appSettings>
  <add key="keyFinancialYr" value="2018-01-01" />

  <add key="keyFinancialQtr" value="1" />
</appSettings>
代码背后的代码 -

    DateTime x = Convert.ToDateTime(WebConfigurationManager.AppSettings["keyFinancialYr"]);
    int y = Convert.ToInt32(WebConfigurationManager.AppSettings["keyFinancialQtr"]);
    using (OleDbConnection excel_con = new OleDbConnection(conString))
    {
        excel_con.Open();
        string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
        DataTable dtExcelData = new DataTable();

        //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default.
        dtExcelData.Columns.AddRange(new DataColumn[9] { new DataColumn("Id", typeof(int)),
              new DataColumn("Banks", typeof(string)),
               new DataColumn("Crop Loan", typeof(int)),
                new DataColumn("Water Resources", typeof(decimal)),
                 new DataColumn("Farm Mechanisation", typeof(int)),
                  new DataColumn("Plantation & Horticulture", typeof(decimal)),
            new DataColumn("Forestry & Wasteland Dev.", typeof(int)),
            new DataColumn("Financial_Quarter", typeof(int),y.ToString()),
            new DataColumn("Financial_yr",typeof(DateTime),x.ToShortDateString())
             });

2 个答案:

答案 0 :(得分:1)

由于DataColumn Constructor的第三个参数是一个表达式,而不是将您的字符串解释为日期,因此将其作为公式,即

1 - 1 - 2018 = -2018

并且-2018不是有效日期。您需要在日期的任何一侧添加单引号,以确保它被解释为文字:

new DataColumn("Financial_yr", typeof(DateTime), "'" + x.ToShortDateString() + "'")

另一种方法是使用DefaultValue属性。

new DataColumn("Financial_yr", typeof(DateTime)) { DefaultValue = x}

答案 1 :(得分:0)

@HAPPYsukh,

您正在使用的DataColumn构造函数需要将表达式作为第三个参数。当您将x.ToShortDateString()传递给它时,会产生01-01-2018,从而导致&#34; -2018&#34;因为它成为表达式并评估为数学公式。和&#34; -2018&#34;肯定不是有效的dateTime值。

同样适用于Financial_Quarter列。

如果要将x设置为列Financial_yr的默认值,则应在创建列后设置它。

您可以将以下列的DefaultValue属性设置为以下列,同时将它们添加到表的列集合中。

var financialQtrColumn = new DataColumn("Financial_Quarter", typeof(int)) { DefaultValue = y };
var financialYearColumn = new DataColumn("Financial_yr", typeof(DateTime)) { DefaultValue = x };
//[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default.
dtExcelData.Columns.AddRange(
    new DataColumn[9] { new DataColumn("Id", typeof(int)),
    new DataColumn("Banks", typeof(string)),
    new DataColumn("Crop Loan", typeof(int)),
    new DataColumn("Water Resources", typeof(decimal)),
    new DataColumn("Farm Mechanisation", typeof(int)),
    new DataColumn("Plantation & Horticulture", typeof(decimal)),
    new DataColumn("Forestry & Wasteland Dev.", typeof(int)),
    financialQtrColumn,
    financialYearColumn
});

我刚刚发布了您需要更改的代码行。

这可以解决您的问题。