插入无法访问 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 queries 和 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();
}
我试图从 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 queries 和 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();
}