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