Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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# DataGridView1更新访问表_C#_Database_Winforms_Ms Access - Fatal编程技术网

C# DataGridView1更新访问表

C# DataGridView1更新访问表,c#,database,winforms,ms-access,C#,Database,Winforms,Ms Access,这段代码是一个更大的函数的一部分,我希望我复制了{}正确地平衡了它们。我有一个dataGridView,它已经被更新了。这个方法就是简单地将更改写回一个空白表 OleDbCommand cmd = new OleDbCommand(); for (int ii = 0; ii < dataGridView1.Rows.Count; ii++) { DataGridViewRow dr = dataGridView1.Rows[

这段代码是一个更大的函数的一部分,我希望我复制了{}正确地平衡了它们。我有一个dataGridView,它已经被更新了。这个方法就是简单地将更改写回一个空白表

    OleDbCommand cmd = new OleDbCommand();
        for (int ii = 0; ii < dataGridView1.Rows.Count; ii++)
        {
            DataGridViewRow dr = dataGridView1.Rows[ii];
            if (dr.Selected == true)
            {
                string connetionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\temp\\Set.mdb;Persist Security Info=False";

                try
                {
                    int number = 0; //possible empty statment warning next line
                    using (OleDbConnection connection = new OleDbConnection(connetionString))
                    {
                        sql = "Insert into EnableOne SET Property=@var1, Pvalue=@var2,  Pdefault=@var3, PType=@var4";
                        connection.Open(); //This fail's to compile connection does not exist in the current context
                        using (OleDbCommand cmd1 = new OleDbCommand(sql, connection))//This fail's to compile connection does not exist in the current context
                        {
                            number = dataGridView1.CurrentCell.RowIndex;
                            int numr = 0;


                            numr = dataGridView1.Rows.Count;


                            {


                                for (int x = 0; x < numr; x++)
                                {
                                    cmd1.Parameters.Add(new OleDbParameter("@var1", dataGridView1.Rows[x].Cells[0].Value.ToString()));
                                    cmd1.Parameters.Add(new OleDbParameter("@var2", dataGridView1.Rows[x].Cells[1].Value.ToString()));
                                    cmd1.Parameters.Add(new OleDbParameter("@var3", dataGridView1.Rows[x].Cells[2].Value.ToString()));
                                    cmd1.Parameters.Add(new OleDbParameter("@var4", dataGridView1.Rows[x].Cells[3].Value.ToString()));
                                    cmd1.CommandText = sql;
                                    cmd1.ExecuteNonQuery();
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }
    }
在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)中 位于System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object&ExecuteSult) 在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&ExecuteSult)中 位于System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior,Object&executeResult) 位于System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior,String方法) 位于System.Data.OleDb.OleDbCommand.ExecuteNonQuery()处

中的CrewCheifSettingsBeta3.Form1.updater(字符串表)中,上面的代码中没有可能是编译器错误源的明显问题(正如您在代码注释中所说的)。但是,还有许多其他问题将成为至少两个运行时错误和一个逻辑错误的根源

最重要的是INSERT INTO语句中使用了错误的语法。使用“插入到”时没有设置。(在UPDATE语句中使用SET)


我可以在上面的代码中看到很多问题,但是没有人是编译问题的根源。如果编译器抱怨一个未定义的连接变量,那么这段代码中还有一些不明显的地方。我添加了一个数据库错误,该错误是在运行程序@Steven时产生的,在使用INSERT INTO时没有设置。(SET在UPDATE语句中使用)虽然在本上下文中正确,但通常不正确。。。示例MySQL在
INSERT
语句中有
SET
。@Rahul是标准SQL吗?Stevee,是的,它不是ANSI标准…:)但是一个MySQL扩展
Error System.Data.OleDb.OleDbException (0x80040E14): Syntax error in INSERT INTO statement.
.....
using (OleDbConnection connection = new OleDbConnection(connetionString))
{
    sql = @"Insert into EnableOne (Property,Pvalue,Pdefault,PType)
                           VALUES (@var1,   @var2, @var3,   @var4)";
    connection.Open(); 
    using (OleDbCommand cmd1 = new OleDbCommand(sql, connection))
    {
        number = dataGridView1.CurrentCell.RowIndex;
        int numr = dataGridView1.Rows.Count;
        cmd1.Parameters.Add("@var1", OleDbType.VarWChar);
        cmd1.Parameters.Add("@var2", OleDbType.VarWChar);
        cmd1.Parameters.Add("@var3", OleDbType.VarWChar);
        cmd1.Parameters.Add("@var4", OleDbType.VarWChar);
        for (int x = 0; x < numr; x++)
        {
            cmd1.Parameters["@var1"].Value = dataGridView1.Rows[x].Cells[0].Value.ToString()));
            cmd1.Parameters["@var2"].Value = dataGridView1.Rows[x].Cells[1].Value.ToString()));
            cmd1.Parameters["@var3"].Value = dataGridView1.Rows[x].Cells[2].Value.ToString()));
            cmd1.Parameters["@var4"].Value = dataGridView1.Rows[x].Cells[3].Value.ToString()));

            // Not needed, already set in the constructor....
            //cmd1.CommandText = sql;
            cmd1.ExecuteNonQuery();
        }
    }
}
// First loop over the grid rows.....
for (int ii = 0; ii < dataGridView1.Rows.Count; ii++)
....
     // Second loop over the grid rows.
     for (int x = 0; x < numr; x++)
Create and open the connection in a using statement
Create and prepare the OleDbCommand in a using statement
Create the parameters needed without values
Start your loop over the rows
if the rows is selected 
    Set each parameter with the data from the selected row
    Execute the query