我想在我的数据库中存储日期。我在web.config中添加了两个键值。我在后面的代码中使用keyFinancialYr
和keyFinancialQtr
将这些值存储在我的数据库中,作为财务年度和财务季度的两列。我可以在我的数据库中存储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())
});
答案 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
});
我刚刚发布了您需要更改的代码行。
这可以解决您的问题。