Каков наилучший способ обновить таблицу MsAccess в .NET - PullRequest
0 голосов
/ 13 мая 2009

Когда необходимо обновить несколько полей в таблице MSAccess (например, Salary = Salary * Factor, SomeNumber = GetMyBusinessRuleOn (SomeNumber) и т. Д ...), и обновление должно повлиять на каждую запись в таблице, каким методом вы использовать?

Я только начал реализовывать это с помощью DataSets, но застрял ( Проблема обновления и сохранения набора данных )

Но, может быть, это даже не идеальный способ справиться с такого рода пакетным обновлением?

Примечание: обновления не должны быть сначала на отключенных данных, поэтому набор данных не требуется.

ОБНОВЛЕНИЕ:

  • Одна команда не сработает, мне нужен какой-то набор записей или курсор для циклического перемещения по записям

Ответы [ 2 ]

1 голос
/ 13 мая 2009

Я бы просто использовал ODBCConnection / ODBCCommand и использовал запрос SQL Update.

Существует драйвер базы данных JET, который вы должны использовать для установки подключения базы данных к базе данных MSAccess с использованием объекта ODBCConeection.

string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\PathTo\\Your_Database_Name.mdb; User Id=admin; Password=";

using (OdbcConnection connection = 
           new OdbcConnection(connectionString))
{
    // Suppose you wanted to update the Salary column in a table
    // called Employees
    string sqlQuery = "UPDATE Employees SET Salary = Salary * Factor";

    OdbcCommand command = new OdbcCommand(sqlQuery, connection);

    try
    {
        connection.Open();
        command.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    // The connection is automatically closed when the
    // code exits the using block.
}

Вы можете использовать эти веб-сайты, чтобы помочь вам создать строку подключения:

РЕДАКТИРОВАТЬ - Пример использования средства чтения данных для циклического перебора записей для применения бизнес-правила

Следует отметить, что следующий пример может быть улучшен определенными способами (особенно если драйвер базы данных поддерживает параметризованные запросы). Я только хотел привести сравнительно простой пример, иллюстрирующий концепцию.

using (OdbcConnection connection = 
           new OdbcConnection(connectionString))
{
    int someNumber;
    int employeeID;
    OdbcDataReader dr = null;
    OdbcCommand selCmd = new OdbcCommand("SELECT EmployeeID, SomeNumber FROM Employees", connection);

    OdbcCommand updateCmd = new OdbcCommand("", connection);

    try
    {
        connection.Open();
        dr = selCmd.ExecuteReader();
        while(dr.Read())
        {
            employeeID = (int)dr[0];
            someNumber = (int)dr[1];
            updateCmd.CommandText = "UPDATE Employees SET SomeNumber= " + GetBusinessRule(someNumber) + " WHERE employeeID = " + employeeID;

            updateCmd.ExecuteNonQuery();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
       // Don't forget to close the reader when we're done
       if(dr != null)
          dr.Close();
    }
    // The connection is automatically closed when the
    // code exits the using block.
}
0 голосов
/ 13 мая 2009

Звучит так, будто вам просто нужно заявление об обновлении:

http://msdn.microsoft.com/en-us/library/bb221186.aspx

Для этого вы можете использовать OleDb Provider .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...