Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO.NET, работа с бд 
:(
    Опции темы
mego4el
  Дата 22.1.2013, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 19.9.2010

Репутация: нет
Всего: нет



Есть небольшой фрагмент программы, где в AdapterDemo() (выделено жирным), я пытаюсь изменить запись в бд, затем сохранить изменения.
Мне нужно всего-лишь Изменить любую запись в DataTable "Books" и сохранить изменения в исходной базе данных.
Не могу разобраться, что же я делаю не так. Сижу читаю в книге - все один в один, ошибок тоже нет, но тем не менее это не приводит к изменению записи в бд и вообще ни к чему.

База данных: Books.mdb, где есть таблицы Authors и Books.
Таблица в которой нужно изменить любую(ые) записи это "Books".
Она состоит из BookID, BookName, AuthorID.

По -умолчанию "Books" заполнена  и состоит из 10 разных значений (по BOOkID это от 1 до 10).

Очень прошу, помогите разобраться. Еще как-нибудь бы вывести результат изменений в бд на консоль.
Спасибо!

Код

using System;
using System.Data;
using System.Data.OleDb;

class DbSample {
    static string SampleDbPath =
        @"Books.mdb";

    static OleDbConnection myConnection;

    static void ReaderDemo() {
        OleDbCommand myCommand = new OleDbCommand( "SELECT * FROM Books", myConnection );

        OleDbDataReader myReader = myCommand.ExecuteReader();

        Console.WriteLine( "All books in database:" );
        while ( myReader.Read() ) {
            object myObject = myReader[ "BookName" ];
            Console.WriteLine( myObject.ToString() );
        }
        myReader.Close();

        myCommand = new OleDbCommand( "SELECT COUNT(*) FROM Books", myConnection );
        Console.WriteLine( "\nBooks count - {0}", myCommand.ExecuteScalar() );
    }

    static void ParameterDemo() {
        OleDbCommand myCommand =
            new OleDbCommand( "SELECT COUNT(*) FROM Books WHERE (AuthorID = ?)",
                             myConnection );
        myCommand.Parameters.Add( "AuthorID", OleDbType.VarChar );
        myCommand.Parameters[ 0 ].Value = 1;

        Console.WriteLine( "\nBooks count by author - {0}", myCommand.ExecuteScalar() );
    }

    static void AdapterDemo() {
        OleDbDataAdapter myAdapter = new
            OleDbDataAdapter( "SELECT * FROM Books", myConnection );

        DataSet myDataSet = new DataSet();

        myAdapter.Fill( myDataSet );

        for ( int i = 0; i < myDataSet.Tables[ 0 ].Rows.Count; ++i ) {
            Console.WriteLine( myDataSet.Tables[ 0 ].Rows[ i ].ItemArray[ 2 ].ToString() );
        }


        myAdapter.UpdateCommand = new OleDbCommand("UPDATE Books SET BookID =?, BookName =?, AuthorID =?"); //+"WHERE
        myAdapter.UpdateCommand.Parameters.Add("BookID", OleDbType.Integer, 3, "BookID");
        myAdapter.UpdateCommand.Parameters.Add("BookName", OleDbType.VarChar, 50, "BookName");
        myAdapter.UpdateCommand.Parameters.Add("AuthorID", OleDbType.Integer, 3, "AuthorID");

        myAdapter.UpdateCommand.Connection = myConnection;
        myAdapter.Update(myDataSet.Tables[0]);

    }

    static void TransactionDemo() {
        OleDbTransaction myTransaction = myConnection.BeginTransaction();
        OleDbCommand dropBooks = new OleDbCommand( "DROP TABLE Books", myConnection );
        //OleDbCommand dropAuthors = new OleDbCommand("DROP TABLE AuthorsNonEx", myConnection);
        OleDbCommand dropAuthors = new OleDbCommand("DROP TABLE Authors", myConnection);

        dropBooks.Transaction = myTransaction;
        dropAuthors.Transaction = myTransaction;

        try {
            dropBooks.ExecuteNonQuery();
            dropAuthors.ExecuteNonQuery();
            myTransaction.Commit();
        } catch ( Exception e ) {
            Console.WriteLine( e.Message );
            myTransaction.Rollback();
        }
    }

    static void Main( string[] args ) {
    myConnection = new OleDbConnection();
    myConnection.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +SampleDbPath;

    myConnection.Open();

    ReaderDemo();
    ParameterDemo();
    AdapterDemo();
    TransactionDemo();

    myConnection.Close();

    }
}



Вот что было выделено жирным (чего-то не выделяет в коде)

myAdapter.UpdateCommand = new OleDbCommand("UPDATE Books SET BookID =?, BookName =?, AuthorID =?"); //+"WHERE
myAdapter.UpdateCommand.Parameters.Add("BookID", OleDbType.Integer, 3, "BookID");
myAdapter.UpdateCommand.Parameters.Add("BookName", OleDbType.VarChar, 50, "BookName");
myAdapter.UpdateCommand.Parameters.Add("AuthorID", OleDbType.Integer, 3, "AuthorID");

myAdapter.UpdateCommand.Connection = myConnection;
myAdapter.Update(myDataSet.Tables[0]);


Это сообщение отредактировал(а) mego4el - 22.1.2013, 19:06
PM MAIL   Вверх
Certain
Дата 23.1.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 18.6.2008
Где: Moscow

Репутация: 1
Всего: 4



Привет!

Цитата

По -умолчанию "Books" заполнена  и состоит из 10 разных значений (по BOOkID это от 1 до 10).

BookID - первичный ключ в таблице Books?
Если ДА, то UPDATE работать не будет, первичный ключ менять нельзя


Цитата

Код

myAdapter.UpdateCommand = new OleDbCommand("UPDATE Books SET BookID =?, BookName =?, AuthorID =?"); //+"WHERE
myAdapter.UpdateCommand.Parameters.Add("BookID", OleDbType.Integer, 3, "BookID");
myAdapter.UpdateCommand.Parameters.Add("BookName", OleDbType.VarChar, 50, "BookName");
myAdapter.UpdateCommand.Parameters.Add("AuthorID", OleDbType.Integer, 3, "AuthorID");

//НЕОБХОДИМО ИНИЦИАЛИЗИРОВАТЬ ВСЕ ПАРАМЕТРЫ
//myAdapter.UpdateCommand.Parameters["AuthorID"].Value = 1;

myAdapter.UpdateCommand.Connection = myConnection;
myAdapter.Update(myDataSet.Tables[0]);



--------------------
Работа программиста и шамана имеет много общего - оба боpмочyт непонятные слова, совершают непонятные действия и не могут объяснить, как оно работает.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.