我有一个使用 VB.NET,VS 2012 编写的“.mdb”Access DB 的应用程序。在 Windows 8 中,我可以运行它,建立与 DB 的连接,使用“SELECT”语句从 DB 读取数据,但是当我尝试用“INSERT”或“UPDATE”语句写回数据,它给了我“语法错误”。具有完全相同代码的相同应用程序在 Windows 7 中运行良好。Win7 和 Win8 中的 SQL 语法有什么区别?
问问题
169 次
1 回答
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();
}
于 2013-06-18T11:59:59.847 回答