Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过access database 2007中的查询更新更新datagridview中的数据时出现问题?_C#_Ms Access_Datagridview_Variable Assignment - Fatal编程技术网

C# 通过access database 2007中的查询更新更新datagridview中的数据时出现问题?

C# 通过access database 2007中的查询更新更新datagridview中的数据时出现问题?,c#,ms-access,datagridview,variable-assignment,C#,Ms Access,Datagridview,Variable Assignment,其他时候我需要你的帮助,我正在使用Access数据库(2007)开发一个C#应用程序,我想问题是查询更新日期,我在互联网上搜索过,但没有任何效果,我有一个datagridview,它有3列,用户需要将数据放入最后2列(5行),我已经这样做了,但是当我填充datagridview中的列时,它不会将数据存储在数据库访问中。所以我需要你的帮助这是我的代码,非常感谢你的帮助 private void btnGuardar_Click(object sender, EventArgs e) {

其他时候我需要你的帮助,我正在使用Access数据库(2007)开发一个C#应用程序,我想问题是查询更新日期,我在互联网上搜索过,但没有任何效果,我有一个datagridview,它有3列,用户需要将数据放入最后2列(5行),我已经这样做了,但是当我填充datagridview中的列时,它不会将数据存储在数据库访问中。所以我需要你的帮助这是我的代码,非常感谢你的帮助

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();
            }



        //}



    }
private void btnGuardar\u单击(对象发送方,事件参数e)
{
//使用(OleDbConnection conn=new-OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0;数据源=Databsename.accdb”))
//{
OleDbConnection conn=新的OleDbConnection(@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=Databasename.accdb;持久安全信息=false”);
int级=1;
字符串x;
字符串注释;
for(int i=0;i
这不是最好的解决方案,但您可以尝试直接在查询中提供值

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();
}
OleDbConnection conn=new-OleDbConnection(@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=Databasename.accdb;Persist-Security-Info=false”);
int idLine;
双级;
字符串注释;
for(int i=0;i
这不是最好的解决方案,但您可以尝试直接在查询中提供值

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();
}
OleDbConnection conn=new-OleDbConnection(@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=Databasename.accdb;Persist-Security-Info=false”);
int idLine;
双级;
字符串注释;
for(int i=0;i
在您的代码中有“更新存档…”。这可能是您的表名,但正确的英语单词是“成就”。检查表名的拼写是否正确。您的代码周围还应该有一个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=“更新档案集”+ “等级=”+等级+ “comment=”“+comment+”,其中idLine=“+idLine; OleDbCommand cmd=新的OleDbCommand(康涅狄格州updateStmt); 并在创建命令之前停止调试器中的代码。将updateStmt的值复制到Access中,看看是否可以直接执行该语句。

在代码中有“updatearchivemnet…”。这可能是您的表名,但正确的英语单词是“成就”。检查表名的拼写是否正确。您的代码周围还应该有一个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=“更新档案集”+ “等级=”+等级+ “comment=”“+comment+”,其中idLine=“+idLine; OleDbCommand cmd=新的OleDbCommand(康涅狄格州updateStmt);
并在创建命令之前停止调试器中的代码。将updateStmt的值复制到Access中,看看是否可以直接执行该语句。

您的UPDATE语句需要在comment=之前加一个逗号。

请看这个在我的系统上运行的示例:

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));
。。。访问投诉:

查询表达式“99 f.foo_text=“updated”中出现语法错误(缺少运算符)。
Y