Ошиба при Update с через DataAdapter
От: Plac2006  
Дата: 07.06.10 07:48
Оценка:
Здравствуйте,

возникла следующая проблема.
Нарисовал простую форму на C# в MSVC 2005.
DataGridView и две кнопки. Одна загружает данные, другая обновляет.
Программа падает на вызове Update. Возникает InvalidOperationException со словами:
{"Динамическое создание SQL для UpdateCommand не поддерживается для SelectCommand, не возвращающей никаких сведений о столбце ключей."}
Не понимаю как исправить. Пробовал разные способы, через DataTable, но везде одно и тоже возникает. Поиском решений тоже не нашёл.

Прописывать команды вручную явно не хочу.

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OracleClient;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        OracleConnection oraConn = new OracleConnection("Data Source=PRODUCT;Persist Security Info=True;User ID=XXMYUSER;Unicode=True;Password=XXMYPWD;");
        OracleDataAdapter orda = null;
        OracleCommandBuilder builder = null;
        DataSet ds = new DataSet(); 
        public Form1()
        {
            InitializeComponent();            
        }

        private void button2_Click(object sender, EventArgs e)
        {            
            if (!ds.HasChanges())
                return;

            DataRow[] rows = ds.Tables[0].Select(null, null, DataViewRowState.ModifiedCurrent);
            orda.Update(rows);        //    <--- тут падение
        }

        private void button1_Click(object sender, EventArgs e)
        {            
            orda.Fill(ds, "FRM_TOTAL");
            dataGridView1.DataSource = ds.Tables[0];
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            oraConn.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            oraConn.Open();
            orda = new OracleDataAdapter("select Id, Total_type_name, Total_table_name from FRM_TOTAL", oraConn);
            builder = new OracleCommandBuilder(orda);        }
    }
}


Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.