C# UPDATE子句中的语法错误
我正在尝试更新MS Access数据库中的值 当直接输入Access时,查询可以正常工作,但是当我尝试在C#中更新它时,会出现“update子句中的语法错误”异常C# UPDATE子句中的语法错误,c#,ms-access,C#,Ms Access,我正在尝试更新MS Access数据库中的值 当直接输入Access时,查询可以正常工作,但是当我尝试在C#中更新它时,会出现“update子句中的语法错误”异常 conMngr.ConnectionStr = ConfigurationManager.ConnectionStrings[_connectionStr].ConnectionString; conMngr.OpenConnection(); try { string query = "select Id, counter
conMngr.ConnectionStr = ConfigurationManager.ConnectionStrings[_connectionStr].ConnectionString;
conMngr.OpenConnection();
try {
string query = "select Id, counter from tabAppCounter where userId=" + _userId.ToString() + " and appPath = '" + path + "'";
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conMngr.DbCon);
DataSet ds = new DataSet();
adapter.Fill(ds);
dataGridView.DataSource = ds.Tables[0];
if (ds.Tables[0].Rows.Count != 0) {
int count = int.Parse(ds.Tables[0].Rows[0].ItemArray[1].ToString())+ 1;
string query2 = "UPDATE tabAppCounter set counter=@count where Id=@Id";
conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
conMngr.OleDbcmd.ExecuteNonQuery();
}
} catch (Exception e) {
MessageBox.Show(e.Message + "\n\n" + e.StackTrace);
}
conMngr.CloseConnection();
此代码在执行ExecuteOnQuery后失败,UPDATE子句异常中出现语法错误
conMngr.ConnectionStr = ConfigurationManager.ConnectionStrings[_connectionStr].ConnectionString;
conMngr.OpenConnection();
try {
string query = "select Id, counter from tabAppCounter where userId=" + _userId.ToString() + " and appPath = '" + path + "'";
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conMngr.DbCon);
DataSet ds = new DataSet();
adapter.Fill(ds);
dataGridView.DataSource = ds.Tables[0];
if (ds.Tables[0].Rows.Count != 0) {
int count = int.Parse(ds.Tables[0].Rows[0].ItemArray[1].ToString())+ 1;
string query2 = "UPDATE tabAppCounter set counter=@count where Id=@Id";
conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
conMngr.OleDbcmd.ExecuteNonQuery();
}
} catch (Exception e) {
MessageBox.Show(e.Message + "\n\n" + e.StackTrace);
}
conMngr.CloseConnection();
我尝试过使用预构建的查询字符串,但这也不起作用 访问驱动程序(和Ole)不使用命名参数,它们是基于位置的。传递参数的顺序与update语句中的参数不匹配,这将导致错误
对于更新字符串中的占位符,确实应该使用?
string query2 = "UPDATE tabAppCounter set counter=? where Id=?";
conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
conMngr.OleDbcmd.ExecuteNonQuery();
最后确保类型正确,传入的类型必须与数据库中的类型匹配。因此,如果count
在两个位置都是int,则传递count
而不是count.ToString()
访问驱动程序(和Ole)不使用命名参数,它们是基于位置的。传递参数的顺序与update语句中的参数不匹配,这将导致错误
对于更新字符串中的占位符,确实应该使用?
string query2 = "UPDATE tabAppCounter set counter=? where Id=?";
conMngr.OleDbcmd = new OleDbCommand(query2, conMngr.DbCon);
conMngr.OleDbcmd.Parameters.AddWithValue("@count", count.ToString());
conMngr.OleDbcmd.Parameters.AddWithValue("@Id", ds.Tables[0].Rows[0].ItemArray[0].ToString());
conMngr.OleDbcmd.ExecuteNonQuery();
最后确保类型正确,传入的类型必须与数据库中的类型匹配。因此,如果
count
在两个位置都是int,则传递count
而不是count.ToString()
,希望这对其他人有所帮助:这对我来说是有效的
而不是
string query2 = "UPDATE tabAppCounter set counter=@count where Id=@Id";
我曾经
string query2 = "UPDATE [tabAppCounter] set [counter]=@count where [Id]=@Id";
神奇的是,一切都开始正常工作。希望这对其他人有所帮助:这就是我的工作 而不是
string query2 = "UPDATE tabAppCounter set counter=@count where Id=@Id";
我曾经
string query2 = "UPDATE [tabAppCounter] set [counter]=@count where [Id]=@Id";
神奇的是,一切都开始正常工作。是否有可能@count被视为字符串而不是数字?在将值直接写入查询之前,我使用了一个预构建的字符串。即使这样,它也不起作用……是否有可能@count被视为字符串而不是数字?在将值直接写入查询之前,我使用了一个预构建的字符串。即使在那时,它也不起作用……我做了这些改变。但是没有用:(@ty812-对不起,我在开会。看起来你已经搞定了。这与转义保留字有关,你可以使用
[]
括号(正如你在下面指出的)。请记住,我的答案中的上述信息仍然有效,并确保您的参数的顺序/添加方式与sql语句中的相同。我做了这些更改。但没有任何效果:(@ty812-抱歉,我正在开会。看起来您已经解决了。这与转义保留字有关,您可以使用[]
括号(如您在下面指出的)。请记住,我的回答中的上述信息仍然正确,并确保您的参数的顺序/添加方式与sql语句中的相同。