【问题标题】:C# DataGridView doesn't update in DatabaseC# DataGridView 不会在数据库中更新
【发布时间】:2015-07-23 06:57:57
【问题描述】:

我创建了一个组合框,其中显示了我数据库中所有表的名称。当我单击一个按钮时,当前表显示在 DataGridView 中。我已经成功创建了一个插入按钮来在当前表中添加新数据,但它不会更新我数据库中的信息......这是代码:

private void insertBttn_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=NUC\MICROGARDE;Initial Catalog=SQL;Integrated Security=True");

         int i = 0;
  //     SqlDataAdapter sda;

        con.Open();

        for (i = 0; i < this.dataGridView1.Rows.Count; i++)
        { 
            string query = "insert into " + comboBox1.SelectedValue.ToString() + " (@" + dataGridView1.Columns[i] + ") VALUES ('" + this.dataGridView1.Columns[i] + "');";

            SqlCommand cmd = new SqlCommand(query, con);
        }

        con.Close();

【问题讨论】:

  • 我有一段时间没有使用 GridViews 和 ADO.NET,但您不需要执行命令吗? (cmd.ExecuteNonQuery();)
  • 好吧...当我尝试执行以下操作时出现错误:SqlCommand cmd = new SqlCommand(query, con); SqlDataReader myReader; myReader = cmd.ExecuteReader();
  • @francydarkcool-你不需要ExecuteReader,你需要ExecuteNonQuery,因为你的sql是INSERT语句,你只需要执行它,不返回任何数据或其他东西。
  • 我试过写 cmd.ExecuteNonQuey(); .它给了我以下错误:附加信息:必须声明标量变量“@DataGridViewTextBoxColumn”。
  • @francydarkcool- add "cmd.Parameters.Add(new SqlParameter(@Field, "value"));"

标签: c# sql database datagridview


【解决方案1】:

基本上你缺少两个关键结构:

  • 1、添加参数
  • 2、执行查询

您的代码已编辑:

    private void insertBttn_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=NUC\MICROGARDE;Initial Catalog=SQL;Integrated Security=True");

        int i = 0;
        con.Open();
        for (i = 0; i < this.dataGridView1.Rows.Count; i++)
        { 
            string query = "insert into " + comboBox1.SelectedValue.ToString() + " (@" + dataGridView1.Columns[i] + ") VALUES ('" + this.dataGridView1.Columns[i] + "');";
            SqlCommand cmd = new SqlCommand(query, con);
            cmd.Parameters.Add(new SqlParameter(@Field, "value"));
            cmd.Parameters.Add(new SqlParameter(@Field, "value"));
            cmd.ExecuteNonQuery();
        }
        con.Close();
     }

使用参数也可以阻止 SQL 注入。

【讨论】:

  • 再次,我得到这个错误:必须声明标量变量“@DataGridViewTextBoxColumn”。
  • 能否请您发布您的字段和表的名称。您首先需要确定您传入的结果是否正确。您是否尝试过调试(单步调试)?
  • 我有许多不同名称和不同列名称的表。我在 comboBox1.SelectedValue.ToString() 中获取当前表名(例如,“Probe A”)和 dataGridView1.Columns[i] 中的列名
  • 我们需要确保 comboBox1.SelectedValue.ToString() 是“Probe A 或任何相关表”并且同样适用于列。你能确认一下吗?
【解决方案2】:

更改您的代码并检查

protected void insertBttn_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString());
        int i = 0;
        int j = 0;
        string query = "";
        string columnText = "";
        string valueText = "";

        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = con;

        for (i = 0; i < dataGridView1.Rows.Count; i++)
        {
            columnText = "";
            valueText = "";
            for (j = 0; j < dataGridView1.Rows[0].Cells.Count; j++)
            {
                if (j != 0)
                {
                    columnText += ",";
                    valueText += ",";
                }
                columnText += dataGridView1.HeaderRow.Cells[j].Text;
                valueText += "'" + dataGridView1.Rows[i].Cells[j].Text + "'";   
            }
            query += "insert into " + comboBox1.SelectedValue.ToString() + " (" + columnText + ") values (" + valueText + ")";
        }

        try
        {
            cmd.CommandText = query;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message.ToString());
        }
        finally
        {
            con.Close();
        }          

    }

【讨论】:

  • 我已经尝试了你所说的,甚至添加了一个 MessageBox 来显示消息“no”,如果它无法执行查询(catch { MessageBox.show("no"); }... 它显示“否” ....
  • 我已经修改了代码,请您检查是否正常
  • 您能否解释一下为什么要执行此代码,只是将表值绑定到gridview,然后将相同的数据插入到同一个表中没有任何意义。你可以做简单的编码。参考:c-sharpcorner.com/uploadfile/raj1979/…
  • 我想在 C# 中的表中添加新数据,当我单击按钮时,要在数据库中更新表。我希望 ths 可以处理数据库中的所有表(每个表都有不同的列)
  • 我已经尝试了代码,但出现 3 个错误:“当前上下文中不存在‘响应’”,错误 1“System.Windows.Forms.DataGridView”不包含可以找到“HeaderRow”的定义并且没有扩展方法“HeaderRow”接受“System.Windows.Forms.DataGridView”类型的第一个参数(您是否缺少 using 指令或程序集引用?),错误 2 'System. Windows.Forms.DataGridViewCell' 不包含'Text' 的定义,并且找不到接受'System.Windows.Forms.DataGridViewCell' 类型的第一个参数的扩展方法'Text'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2017-06-26
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多