Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 20:05   #1
mego4el
Пользователь
 
Аватар для mego4el
 
Регистрация: 19.09.2010
Сообщений: 87
Печаль ADO.NET, работа с бд

Есть небольшой фрагмент программы, где в 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();

	}
}
mego4el вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADO.NET tiger Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 21.02.2011 22:24
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36
ADO.NET CreaGame Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 10 22.08.2009 23:23
ADO.Net __avatar__ Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 3 01.06.2009 01:44