0

我有这段代码,用于从 DataGrid 更新数据库

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace datagrid
{
public partial class Form1 : Form
{
    private MySqlConnection conn;
    private DataTable data;
    private MySqlDataAdapter da;
    private MySqlCommandBuilder cb;
    public Form1()
    {
        InitializeComponent();
    }

    private void btnshow_Click(object sender, EventArgs e)
    {
        string c = "server=localhost;database=std;uid=root;password=";
        conn = new MySqlConnection(c);
        conn.Open();
        data = new DataTable();

        da = new MySqlDataAdapter("SELECT * FROM general",conn);
        cb = new MySqlCommandBuilder(da);

        da.Fill(data);

        dataGridView1.DataSource = data;
    }

    private void btnupdate_Click(object sender, EventArgs e)
    {
        DataTable changes = data.GetChanges();
        da.Update(changes);
        data.AcceptChanges();
    }
 }
}

现在,当我按下更新按钮时,它向我显示了这个异常:

{“对于不返回任何键列信息的 SelectCommand,不支持为 UpdateCommand 生成动态 SQL。”}

现在请告诉我我该怎么办?

像这样的异常

4

2 回答 2

1

从这个http://social.msdn.microsoft.com/Forums/en-US/5dec5633-ac84-48d9-8fd6-5c7601be4ccd/exception-dynamic-sql-generation-for-the-updatecommand-is-not-supported-反对选择命令 和许多其他文章

我很确定这些异常意味着您的选择查询需要返回表的主键。如果您的表没有主键,则需要设置一个。

否则,您应该手动创建 DeleteCommand 和 UpdateCommand 并将它们分配给各自的属性。

于 2013-06-22T15:44:52.520 回答
0
    Try
        If con.State = ConnectionState.Open Then con.Close()
        con.Open()
        global_command = New SqlCommand("UPDATE products_tbl set running_no = '" & txt_running.Text & "' where template_code = 'n'and prod_no = '" & txt_product.Text & "'", con)
        global_command.ExecuteNonQuery()
        global_command.Dispose()

        MsgBox("Successfully updated!", MsgBoxStyle.Information, "Message")
        where = vbNullString

    Catch ex As Exception
        MsgBox("Trace No 4: System Error or Data Error!" + Chr(13) + ex.Message + Chr(13) + "Please Contact Your System Administrator!", vbInformation, "Message")
    End Try

    Try
        If con.State = ConnectionState.Open Then con.Close()
        con.Open()
        Dim dset As New DataSet
        Dim dbind As New BindingSource
        Dim strquery As String
        strquery = "SELECT prod_code, prod_no, prod_suffix, prod_lvl, customer, model, family, company_code, company_name, company_address, running_no, template_code FROM products_tbl where template_code = 'n' and prod_no = '" & txt_product.Text & "'  and prod_suffix = '" & txt_suffix.Text & "' and prod_lvl = '" & txt_level.Text & "'"
        Dim adap As New SqlDataAdapter(strquery, con)
        dset = New DataSet
        adap.Fill(dset)
        dbind.DataSource = dset.Tables(0)
        dg.DataSource = dbind
    Catch ex As Exception
        MsgBox("Trace No 3: System Error or Data Error!" + Chr(13) + ex.Message + Chr(13) + "Please Contact Your System Administrator!", vbInformation, "Message")
    End Try
End Sub
于 2014-01-09T07:47:43.433 回答