Мне нужно создать приложение C#, которое, как я ожидаю, будет расти довольно крупным, поэтому я хочу начать с хорошей настройки. Потому что я в основном использую PHP, и это было очень долгое время с тех пор, как я написал приложение C#, у меня возникли некоторые проблемы, из-за которых я не могу оторвать голову из-за различной информации и плохих примеров, которые я могу найти в Интернете.Построение проекта C# 3-уровня - проблемы с обработкой базы данных
Я создал трехуровневую структуру, имеющую форму, класс бизнес-логики и dataclass. У меня также есть база данных для выполнения операций с базой данных.
Как я должен обрабатывать привязки данных? Теперь я справиться с ними в самом классе базы данных путем открытия соединения и его закрытия в операции CRUD (получить, вставка, удаление, ...)
Я основан себя на этой статье: http://www.codeproject.com/Articles/36847/Three-Layer-Architecture-in-C-NET Это хороший один?
Я немного смущен, потому что в PHP я открываю свое соединение в начале моей страницы, используя новый экземпляр, где конструктор немедленно предоставляет соединение. В C# Я вижу много открытий и закрытий для каждого запроса?
frmUsers (пользователи формируют)
private void btnListUsers_Click(object sender, EventArgs e)
{
UsersBLL usersbll = new UsersBLL();
DataTable dtUsers = usersbll.getUsers();
}
UsersBLL (бизнес-логика класс)
class UsersBLL
{
private DataUsers du;
public UsersBLL()
{
du = new DataUsers();
}
public DataTable getUsers()
{
return du.getUsers();
}
}
DataUsers (класс данных)
public class DataUsers
{
private Database db;
public DataUsers()
{
db = new Database();
}
public DataTable getUsers()
{
return db.get("select * from users");
}
}
Отрывок из класса Database:
class Database
{
private iDB2Connection cn;
public Database(){
cn = new iDB2Connection(ConfigurationManager.ConnectionStrings["iseries"].ToString());
}
public void openConnection()
{
cn.Open();
}
public void closeConnection()
{
if (cn != null)
{
cn.Close();
cn.Dispose();
}
}
public DataTable get(String query)
{
try
{
openConnection();
iDB2Command cmd = cn.CreateCommand();
cmd.CommandText = query;
iDB2DataAdapter da = new iDB2DataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds.Tables[0];
}
finally
{
closeConnection();
}
}
}
Вам необходимо провести реорганизацию класса базы данных. Используйте выражение 'using' вместо того, чтобы полагаться на try-catch-finally. Подробнее читайте здесь: http://blogs.msdn.com/b/angelsb/archive/2004/10/08/240123.aspx и здесь: http://www.sqlnotes.info/2012/02/01/few- вещи-о-пул-соединения/и здесь: http://stackoverflow.com/questions/8649096/open-connection-before-every-single-nonquery-or-one-connection-for-the-whole – Abhitalks
Вы посмотрели в ORM, например, «NHibernate», «Entity Framework» или «Linq2Sql»? Я бы очень помог вашему «слою базы данных». – hatcyl
Я бы с удовольствием использовал один из них, но мы используем базу данных db2 на iSeries, и установить ее с ORM не так просто. – randomizer