infoCENTER ευχαριστώ που αφιερώνεις τόσο χρόνο για να γράψεις αναλυτικά πάνω στην απορία μου. Λοιπόν παραθέτω κώδικα να δεις πως χρησιμοποιώ το Singleton pattern στην εφαρμογή μου ώστε να αποφανθείς αν το χρησιμοποιώ σωστά.
public class ContactRepository
{
private OleDbDataAdapter _contactDataAdapter;
private OleDbCommand _selectCommand;
private OleDbCommand _insertCommand;
private OleDbConnection _connection;
private DataSet _contactDataset;
private static readonly ContactRepository _instance = new ContactRepository();
private ContactRepository()
{
_contactDataAdapter = new OleDbDataAdapter();
_contactDataset = new DataSet();
_connection = new OleDbConnection(App.GetConnectionString());
if (_connection.State == ConnectionState.Closed)
_connection.Open();
_contactDataAdapter.SelectCommand = new OleDbCommand("SELECT surname, firstname, city, address, mobilephone, homephone FROM Contact", _connection);
_contactDataAdapter.InsertCommand = new OleDbCommand(@"
INSERT INTO Contact(surname, firstname, city, address, mobilephone, homephone)
VALUES (@surname, @firstname, @city, @address, @mobilephone, @homephone)", _connection);
_contactDataAdapter.InsertCommand.Parameters.Add("@surname", OleDbType.VarChar, 50, "surname");
_contactDataAdapter.InsertCommand.Parameters.Add("@firstname", OleDbType.VarChar, 50, "firstname");
_contactDataAdapter.InsertCommand.Parameters.Add("@city", OleDbType.VarChar, 50, "city");
_contactDataAdapter.InsertCommand.Parameters.Add("@address", OleDbType.VarChar, 50, "address");
_contactDataAdapter.InsertCommand.Parameters.Add("@mobilephone", OleDbType.VarChar, 10, "mobilephone");
_contactDataAdapter.InsertCommand.Parameters.Add("@homephone", OleDbType.VarChar, 10, "homephone");
_contactDataAdapter.Fill(_contactDataset, "Contact");
_connection.Close();
}
public static ContactRepository GetContactRepository()
{
return _instance;
}
public DataTable GetDataSource()
{
return _contactDataset.Tables["Contact"];
}
public void Insert(string surname, string firstname, string city, string address, string mobilephone, string homephone)
{
if (_connection.State == ConnectionState.Closed)
_connection.Open();
_contactDataAdapter.InsertCommand.Parameters["@surname"].Value = surname;
_contactDataAdapter.InsertCommand.Parameters["@firstname"].Value = firstname;
_contactDataAdapter.InsertCommand.Parameters["@city"].Value = city;
_contactDataAdapter.InsertCommand.Parameters["@address"].Value = address;
_contactDataAdapter.InsertCommand.Parameters["@mobilephone"].Value = mobilephone;
_contactDataAdapter.InsertCommand.Parameters["@homephone"].Value = homephone;
_contactDataAdapter.InsertCommand.ExecuteNonQuery();
_connection.Close();
}
Έχω δηλαδή τον constructor, την
GetContactRepository()που επιστρέφει το Instance, την GetDataSource() που γίνεται bind με ένα Datagrid και την Insert που καταχωρεί μία εγγραφή στη βάση.
Τέλος, όσο για το BindingSource, το ψάχνω για να δω ακριβώς πως δουλεύει, οπότε χρειάζομαι και λίγη βοήθεια

.