我有一个使用“.mdb”Access DB编写的应用程序,用VB.NET,VS 2012编写。 在Windows 8中,我可以运行它,建立与DB的连接,使用“SELECT”语句从DB读取数据,但是当我尝试使用“INSERT”或“UPDATE”语句写回数据时,它给了我“语法错误“。 具有完全相同代码的相同应用程序在Windows 7中运行良好。 Win7和Win8中的SQL语法有什么区别?
答案 0 :(得分:0)
此处的问题不是Windows版本,而是Windows“区域设置”控制面板中定义的小数点分隔符。
某些区域设置使用逗号(,
)作为小数分隔符,但ACE / Jet始终使用句点(.
)作为小数分隔符。因此,在为其中一个使用逗号(例如“法语(加拿大)”)的语言环境配置的计算机上,以下代码将失败:
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.Text;
string pi = Math.PI.ToString(); // "3,14159265358979"
cmd.CommandText =
"INSERT INTO Constants (ConstantName, ConstantValue) " +
"VALUES ('pi', " + pi + ")";
cmd.ExecuteNonQuery();
}
这是使用参数化查询的一个好主意的另一个原因,因为无论区域设置如何,以下代码都有效:
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText =
"INSERT INTO Constants (ConstantName, ConstantValue) " +
"VALUES (?, ?)";
cmd.Parameters.AddWithValue("?", "pi");
cmd.Parameters.AddWithValue("?", Math.PI);
cmd.ExecuteNonQuery();
}