Обновление базы данных SQL из данных Datagridview: динамическая генерация SQL для UpdateCommand не поддерживается - PullRequest
0 голосов
/ 04 октября 2019

В моей базе данных есть таблица с именем "TB1". Я хочу обновить свою SQL базу данных из dataGridview элемента управления, когда я изменяю ее данные и нажимаю на обновление button, но возникает ошибка.

Ошибка:

System.InvalidOperationException: Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information. 
at System.Data.Common.DbDataAdapter.UpdatingRowStatusErrors(RowUpdatingEventArgs rowUpdatedEvent, DataRow dataRow) 
at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping) 
at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)

Что с этим не так?

> public partial class Form1 : Form
>     {
> 
>         SqlConnection con;
>         SqlDataAdapter adapt;
>         DataSet ds;
>         SqlCommandBuilder cmdbl;
> 
>         public Form1()
>         {
>             InitializeComponent();
>      
>         }
>          private void Form1_Load(object sender, EventArgs e)
>         {
>             con = new SqlConnection();
>             con.ConnectionString= (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=H:\New\RemDaBase.mdf;Integrated
> Security=True;Connect Timeout=30");
>             con.Open();
>             adapt = new SqlDataAdapter("SELECT * FROM  TB1", con);
>             ds = new DataSet();
>             adapt.Fill(ds, "TB1");
>             dataGridView1.DataSource = ds.Tables[0];
>         }
> 
>  private void button1_Click(object sender, EventArgs e)
>         {
>             try
>             {
>                 cmdbl = new SqlCommandBuilder(adapt);
>                 adapt.Update(ds, "TB1");
>                 MessageBox.Show("Updated Successfully");
>             }
>             catch (Exception ex)
>             {
>                 MessageBox.Show(ex.ToString());
> 
>             }
>         }
>     }

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

О, я нашел решение.

Это произошло потому, что я не использовал primary key в своей базе данных.

0 голосов
/ 04 октября 2019

Вы можете использовать его таким образом.

private void Form1_Load(object sender, EventArgs e)
     {

         con = new SqlConnection();
         con.ConnectionString= (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=H:\New\RemDaBase.mdf;Integrated Security=True;Connect Timeout=30");
         con.Open();
         adapt = new SqlDataAdapter("SELECT * FROM  TB1", con);
         DataTable dt = new DataTable();
         BindingSource bs = new BindingSource();
         bs.DataSource = dt;
         adapt.Fill(dt);
         dataGridView1.DataSource = dt;
     }

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        cmdbl = new SqlCommandBuilder(adapt);
        adapt.Update(dt);
        MessageBox.Show("Updated Successfully");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...