我正在用C#编写一个连接到其他应用程序使用的数据库的应用程序。我正在编写访问数据库的类,如下所示:
class conexionBD
{
string connString;
protected void miConexion(string ruta)
{
connString = String.Concat("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=", ruta);
}
protected DataTable misEmpleados()
{
string query = "SELECT Fiel1, Field2 FROM Table1";
DataTable dTable = miDatatable(query);
return dTable;
}
protected DataColumn misDptos()
{
DataTable dTable = miDatatable("SELECT OtherField from OtherTable");
return dTable.Columns[0];
}
private DataTable miDatatable(string sqlQuery)
{
OleDbDataAdapter dAdapter = new OleDbDataAdapter(sqlQuery, connString);
OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
DataTable dTable = new DataTable();
dAdapter.Fill(dTable);
return dTable;
}
}
app firts调用方法“miConexion”来设置硬盘中数据库的路径。然后,每当我想要将数据存储在“Table1”和“OtherTable”中时,应用程序就会连接和断开连接。
两个应用程序可能同时访问和修改数据库。在这种情况下,“连接和断开连接”是访问数据库的最佳方式吗?
答案 0 :(得分:1)
您可以进行3项改进:
答案 1 :(得分:0)
这两个应用都可能会访问和修改数据库 同一时间。
然后你需要使用transactions。
同时检查您是否打开和关闭连接,并且连接在最短的时间内保持打开状态。 OleDb堆栈真的很旧,如果这是一个新的应用程序考虑转移到ORM或至少ADO.NET。
答案 2 :(得分:0)
这是方法“miDatatable”的修改,它连接到Access数据库:
private DataTable miDatatable(string sqlQuery)
{
using (OleDbConnection connDB = new OleDbConnection(connString))
{
OleDbDataAdapter dAdapter;
OleDbCommandBuilder cBuilder;
OleDbCommand command = new OleDbCommand();
DataTable dTable = new DataTable();
OleDbTransaction trans = null;
try
{
connDB.Open();
trans = connDB.BeginTransaction(IsolationLevel.ReadCommitted);
command.Connection = connDB;
command.Transaction = trans;
command.CommandText = sqlQuery;
dAdapter = new OleDbDataAdapter(sqlQuery, connDB);
cBuilder = new OleDbCommandBuilder(dAdapter);
dAdapter.SelectCommand.Transaction = trans;
dAdapter.Fill(dTable);
trans.Commit();
}
catch
{
try
{
trans.Rollback();
}
catch { }
}
return dTable;
}
}