C# 连接两个应用程序将使用的本地数据库的最佳方式是什么?
我正在用C#编写一个应用程序,它连接到其他应用程序使用的数据库。我正在编写访问数据库的类,如下所示:C# 连接两个应用程序将使用的本地数据库的最佳方式是什么?,c#,sql-server,database-connection,oledb,C#,Sql Server,Database Connection,Oledb,我正在用C#编写一个应用程序,它连接到其他应用程序使用的数据库。我正在编写访问数据库的类,如下所示: class conexionBD { string connString; protected void miConexion(string ruta) { connString = String.Concat("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=", ruta); } prote
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;
}
}
应用程序首先调用方法“miConexion”来设置硬盘中数据库的路径。然后,每当我想要获取存储在“Table1”和“OtherTable”中的数据时,应用程序就会连接和断开连接
两个应用程序可能同时访问和修改数据库。在这种情况下,“连接和断开连接”是访问数据库的最佳方式吗
数据库可能会被两个应用程序同时访问和修改
同时
那么你就需要使用
还要检查您是否打开和关闭连接,以及连接是否在尽可能短的时间内保持打开状态。如果这是一个新的应用程序,考虑到ORM或至少ADO.NET./P>,OLeDB堆栈就很旧了。
数据库可能会被两个应用程序同时访问和修改
同时
那么你就需要使用
还要检查您是否打开和关闭连接,以及连接是否在尽可能短的时间内保持打开状态。OLeDB堆栈是很旧的,如果这是一个新的应用程序,考虑移动到ORM或至少ADO.NET .< /P> < P>,您可以做3个改进:
您可以进行3项改进:
使用类似ORM的实体框架(EF)或NHibernate来管理对象的状态(如果两个应用程序都是.Net)
我建议使用NHibernate,因为您正在使用OLE数据适配器(但请查看是否有用于EF的数据库的连接器,因为它更易于设置)使用类似ORM的实体框架(EF)或NHibernate来管理对象的状态(如果两个应用程序都是.Net)
我建议使用NHibernate,因为您正在使用OLE数据适配器(但请查看是否有用于EF的数据库的任何连接器,因为它更易于设置)这是对“MIDATABLE”方法的修改,它连接到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;
}
}
这是对“MIDATABLE”方法的修改,它连接到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;
}
}
对这个问题的回答可能会给你一些启示:对这个问题的回答可能会给你一些启示: