其他时间我需要你的帮助,我正在使用Access数据库(2007)在C#中开发一个应用程序,我认为这个问题是查询更新,我在互联网上搜索但没有任何作用,我有一个datagridview它有用户需要将3列数据放到最后2列(5行)中,我已经这样做了,但是当我填充datagridview中的列时,它确实将数据存储在数据库访问中。所以,我需要你帮助这是我的代码,帮助非常apreciated:D
private void btnGuardar_Click(object sender, EventArgs e)
{
//using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databsename.accdb"))
//{
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databasename.accdb;Persist Security Info=false");
int grade = 1;
string x;
string comment;
for (int i = 0; i < this.dataGridView4.Rows.Count-1; i++)
{
x = dataGridView4.Rows[i].Cells[1].Value.ToString();
//Console.WriteLine(x);
MessageBox.Show(x);
grade = int.Parse(x);
comment = dataGridView4.Rows[i].Cells[2].Value.ToString();
MessageBox.Show(comment);
OleDbCommand cmd = new OleDbCommand("Update archievemnet set grade= @GRADE comment=@COMMENT WHERE idLine =1 ", conn);
cmd.Parameters.Add(new OleDbParameter("@GRADE", OleDbType.Integer));
cmd.Parameters["@GRADE"].Value = grade;
cmd.Parameters.Add(new OleDbParameter("@comment", OleDbType.VarChar));
cmd.Parameters["@COMMENT"].Value = comment;
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
//}
}
答案 0 :(得分:1)
您的UPDATE语句需要在评论=
之前使用逗号看看这个适用于我的系统的例子:
UPDATE tblFoo AS f SET f.parent_id = 99, f.foo_text = "updated"
WHERE (((f.id)=10));
99后没有逗号......:
UPDATE tblFoo AS f SET f.parent_id = 99 f.foo_text = "updated"
WHERE (((f.id)=10));
...访问抱怨:
Syntax error (missing operator) in query expression '99 f.foo_text = "updated"'.
答案 1 :(得分:0)
这不是最佳解决方案,但您可以尝试直接在查询中提供值。
OleDbCommand cmd = new OleDbCommand("UPDATE archievemnet SET " +
" grade = " + textBoxGrade.Text +
" comment = " + textBoxComment.Text +
" WHERE idLine = 1 ", conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
修改强>
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Databasename.accdb;Persist Security Info=false");
int idLine;
double grade;
string comment;
for (int i = 0; i < this.dataGridView4.Rows.Count-1; i++)
{
idLine = Convert.ToInt32(dataGridView4[0, i].Value);
grade = Convert.ToDouble(dataGridView4[1, i].Value);
comment = Convert.ToString(dataGridView4[2, i].Value);
OleDbCommand cmd = new OleDbCommand("UPDATE archievemnet SET " +
" grade = " + grade +
" comment = '" + comment + "' WHERE idLine = "+ idLine, conn);
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
}
答案 2 :(得分:0)
在您的代码中,您有“Update archievemnet ...”。这可能是你桌子的名字,但正确的英文单词是“Achievement”。检查您是否正确拼写了表的名称。您还应该在代码周围使用try / catch块来捕获Access或db连接器抛出的任何异常,以及异常块中的一些日志记录。 (我使用并推荐NLog。)你说你得到一个例外,它是什么类型,消息是什么?
我认为你最好在你的最终代码中使用参数(就像你开始做的那样),而不是像yonan2236推荐的字符串连接 - 但它有时可以帮助调试。你可以试试:
String updateStmt = "UPDATE archievemnet SET " + " grade = " + grade + " comment = '" + comment + "' WHERE idLine = "+ idLine; OleDbCommand cmd = new OleDbCommand(updateStmt, conn);
并在创建命令之前停止调试器中的代码。将updateStmt的值复制到Access中,看看是否可以直接执行该语句。