我试图从Access数据库向SQL Server中插入一些值,但由于名为colz的datetime列而失败。在SQL Server中,我有一个日期时间列(colz),在访问时它也是日期时间(行[" c"])。
数据类型和连接没有错误。像1.mm.yyyy这样的日期没问题。问题是日期如10到31.mm.yyyy。例外说
将varchar数据类型转换为日期时间数据类型会导致超出范围的值。
当我尝试使用操作数#exception时说
从字符串
转换日期和/或时间时转换失败
我的#代码就像'#" ......."#'
int i, k = dt.Rows.Count;
for (i = 0; i < k; i++) {
insertToSql = insertToSql + "insert into myTable(colx,coly,colz) values('"
+ dt.Rows[i]["a"].ToString().Trim() + "','"
+ dt.Rows[i]["b"].ToString().Trim() + "','"
+ dt.Rows[i]["c"].ToString().Trim() + "')";
}
答案 0 :(得分:4)
您有bad habits to kick : choosing the wrong data type
您永远不会将DateTime
值存储为字符串。如果您的dt.Rows[i]["c"]
已经 DateTime
,则应明确将其转换为DateTime
,然后使用OleDbType.Date
using(var connection = new OleDbConnection(conString))
using(var cmd = connection.CreateCommand())
{
cmd.CommandText = "insert into myTable(colx,coly,colz) values(?, ?, ?)";
cmd.Parameters.Add("?", OleDbType.VarWChar).Value = dt.Rows[i]["a"].ToString().Trim();
cmd.Parameters.Add("?", OleDbType.VarWChar).Value = dt.Rows[i]["b"].ToString().Trim();
cmd.Parameters.Add("?", OleDbType.Date).Value = (DateTime)dt.Rows[i]["c"];
connection.Open();
cmd.ExecuteNonQuery();
}
参数与cleartool mkattr -replace Delivered \"yes\" activity:activity_id@\aPVob
完全一致类型。
public ArrayList<ArrayList<LatLng>> badSpots = new ArrayList<>();
int badArrayNum = 0;
答案 1 :(得分:1)
您需要格式化YYYY-MM-DD中的日期字段以保持一致性。当月份数为10或更高时,日期解析器会混淆月份和日期值。
2016年10月12日可能会抛出错误,而2016-10-12则不会。