插入无法访问 sql

insert fail access to sql

我试图从 Access 数据库向 SQL 服务器插入一些值,但由于名为 colz 的日期时间列而失败。在 SQL 服务器中,我有一个日期时间列(colz),在访问中它也是日期时间(行 ["c"])。

数据类型和连接没有错误。 1.mm.yyyy 这样的日期没问题。问题出在 10 到 31.mm.yyyy 这样的日期上。异常说

The conversion of a varchar datatype to a datetime data type resulted in an out-of-range value.

当我尝试使用操作数时 # 异常显示

Conversion failed when converting date and/or time from character string

我带#的代码就像'#"......."#'

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() + "')";
}

您需要将日期字段格式设置为 YYYY-MM-DD 以保持一致性。当月份数为 10 或更高时,日期解析器会混淆月份和日期值。

10-12-2016 可能会抛出错误,而 2016-10-12 则不会。

你有一个bad habits to kick : choosing the wrong data type

您应该永远不要将您的DateTime值存储为字符串。如果您的 dt.Rows[i]["c"] 已经 一个 DateTime,您应该明确地将它们转换为 DateTime 并准确地发送它们 parameterized queriesOleDbType.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();  
}