插入对SQL

时间:2016-03-15 18:51:27

标签: c# sql-server datetime oledb

我试图从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() + "')";
}

2 个答案:

答案 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则不会。