连接到两个应用程序将使用的本地数据库的最佳方法是什么?

时间:2012-01-03 20:35:15

标签: 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);
    }

    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”中时,应用程序就会连接和断开连接。

两个应用程序可能同时访问和修改数据库。在这种情况下,“连接和断开连接”是访问数据库的最佳方式吗?

3 个答案:

答案 0 :(得分:1)

您可以进行3项改进:

  1. 将特定数据库适配器抽象为配置文件。
  2. 完成后处理ado.net对象
  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;
            }
        }