Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Firebird методы INSERT,UPDATE,DELETE


Автор: mrVerus 26.4.2010, 12:23
Я недавно сел на C# поэтому возникают следующие вопросы:
Есть GridView данные он получает из FBdataAdapter. Как изменения сделанные пользователем в GridView залить в обратно в базу. Знаю что в FBdataadapter есть методы такие как INSERT, UPDATE, DELETE, только механизм работы их не ясен. Как происходит обновления базы7  Например в таблице GridView пользователь внес изменения в нескольких записях, как должно произойти изменения в БД с помощью UPDATE. Есть скрипт UPDATE, он что прокатится по всему массиву записей таблицы7
Помогите пожалуйста 

Автор: mrVerus 27.4.2010, 21:27
Как работать с firebird7 Вся литература приводит примеры в режиме дизайн-тайма. Научился только получать данные БД по средствам SQL в dataGridView, а как залить изменения из gridview'a в BD7  Кто нибуть приведите пример7 smile 

Автор: mrVerus 28.4.2010, 08:21
Ладно видимо меня никто не понял. Вопрос такой, есть команды INSERT,DELETE,UPDATE и SELECT.
Команда SELECT=”select * from t123”;
DataSet ds=new DataSet;
FbDataAdapter da=new FbDataAdapter();
da.SelectCommand=new FbCommand(“select * from t123”, connstr);
da.fill(ds);
Следовательно в DataGrid отобразит всю таблицу, (предупреждаю код примерный)
Вот впишу команды в Insert,Delete,Update,  как они будут генерироваться.
Для синхронизации данных м/у БД и данными введенными пользователем существует метод .update(ds). При вызове такого метода он автоматически вызовет команды SQL7
Простите недавно пришел из Delphi

Автор: Heinzz 28.4.2010, 08:35
Используйте http://www.firebirdsql.org/dotnetfirebird/documentation/api/1.7/FirebirdSql.Data.Firebird.FbCommandBuilder.html
если ваша база данный не распределенная.

Автор: mrVerus 28.4.2010, 09:26
А как им  воспользоваться7 База данных работает через FBServer на удаленном ПК

Автор: Heinzz 28.4.2010, 09:33
главное что на одном, так что просто это в connectionString укажите, разницы никакой нет.

Автор: mrVerus 28.4.2010, 09:46
можно пример

Добавлено через 7 минут и 28 секунд
И вот еще при вызове метода .UPDATE(ds) команды SQL срабатыват автоматически7
Например пользователь в DataGrid'е изменил некаторые записи добавил новую. При .update выполнится соответ код, да?
Это как аналог Post в Delphi? 

Автор: Heinzz 28.4.2010, 09:57
Код

    FbConnection  myConn     = new FbConnection(myConnection);    
    FbDataAdapter myDataAdapter = new FbDataAdapter();
    FbTransaction myTxn         = myConn.BeginTransaction();
    
    myDataAdapter.SelectCommand = new FbCommand(mySelectQuery, myConn, myTxn);
    FbCommandBuilder custCB     = new FbCommandBuilder(myDataAdapter);

    myConn.Open();

    DataSet custDS = new DataSet();
    myDataAdapter.Fill(custDS, "Employee");

    //code to modify data in dataset here

    //Without the FbCommandBuilder this line would fail
    myDataAdapter.Update(custDS, "Employee");

    myConn.Close();

    return custDS;


Автор: mrVerus 28.4.2010, 09:58
И нужно передать параметры из datagrid'a при update, итд7

Добавлено через 11 минут и 6 секунд
 smile  это оканчательно меня запутало1

Автор: Heinzz 28.4.2010, 10:32
пример для MSSql, у Вас просто немного другие классы.
Код

 public partial class Form1 : Form
    {
        string myConnection = @"Data Source=HEINZZY\SQLEXPRESS;Initial Catalog=MyDB;Integrated Security=True";
        SqlConnection myConn;
        SqlDataAdapter myDataAdapter;
        DataSet custDS;


        public Form1()
        {
            InitializeComponent();

            myConn = new SqlConnection(myConnection);

            string mySelectQuery = "SELECT * FROM Customers";
            myDataAdapter = new SqlDataAdapter(mySelectQuery,myConn);
            
            //вот эта строка делает Update комманду
            SqlCommandBuilder custCB = new SqlCommandBuilder(myDataAdapter);

            myConn.Open();
            custDS = new DataSet();
            myDataAdapter.Fill(custDS, "Customers");
            dataGridView1.DataSource = custDS;
            dataGridView1.DataMember = "Customers";
            myConn.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Сохранить изменения
            myDataAdapter.Update(custDS, "Customers");
        }
    }


Автор: mrVerus 28.4.2010, 11:08
ТЕ за открытием и закрытием соединения следить не нужно7

Автор: Heinzz 28.4.2010, 11:23
как видите в моем коде изменения производятся уже после закрытия соединения.
 smile 

Автор: mrVerus 29.4.2010, 07:18
Заставил работать но без FbCommandBuilder

Автор: KelTron 29.4.2010, 07:24
Для адаптера не нужно открывать соединение, он сам всё сделает, так что это лишнее:
Код

myConn.Open();
...
myConn.Close();

А если и надо открывать то лучше через using:
Код

using (myConn = new SqlConnection(myConnection))
{
            myConn.Open();
            ...
}

Так можно быть уверенным, что соединение будет закрыто в любом случае.

Автор: mrVerus 29.4.2010, 07:30
Огроманое спасибо + Heinzz'у 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)