Получите значение автонабора, которое только что было вставлено в C#

Если поле базы данных является полем автонабора, то база данных автоматически генерирует для него значения. Например, предположим, что таблицы Students имеют типичные поля, такие как FirstName, LastName, EnrollmentYear и т. д. Вы можете сделать поле StudentId полем autonumber. Затем база данных автоматически устанавливает это значение в 1, 2, 3 и так далее для новых студентов по мере их создания.

Прежде чем говорить больше о полях автозапуска, позвольте мне упомянуть, что программа использует следующий код для создания соединения с базой данных при его запуске.


// Объект соединения.
private OleDbConnection Conn;

// Создаем соединение с базой данных.
private void Form1_Load(object sender, EventArgs e)
{
    // Создаем объект соединения.
    const string db_name = "Students.mdb";
    Conn = new OleDbConnection(
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        "Data Source=" + db_name + ";" +
        "Mode=Share Deny None");
}

Обработчик события Load формы просто создает объект OleDbConnection и устанавливает его строку подключения для использования OLE DB для подключения к базе данных Students.mdb . Во время разработки я добавил эту базу данных в проект, установил свойство «Свойство сборки» в «Содержимое» и установил для своего свойства «Копировать в выходной каталог» значение «Копировать, если новый», чтобы база данных автоматически копировалась в исполняемый каталог.

Хорошо, вернемся к автонументированию.

Чтобы создать новую запись в таблице с полем автонабора, просто не указывайте значение для этого поля, и база данных автоматически генерирует ее. Если вы вводите значения первого и последнего имени и нажмите «Создать», в этом примере используется следующий фрагмент кода для создания новой записи таблицы Student.

// Создаем новую запись студентов.
private void btnCreate_Click(object sender, EventArgs e)
{
    // Создаем команду.
    OleDbCommand cmd = new OleDbCommand(
        "INSERT INTO Students(FirstName, LastName) VALUES (?, ?)",
        Conn);
    cmd.Parameters.Add(
        new OleDbParameter("FirstName", txtFirstName.Text));
    cmd.Parameters.Add(
        new OleDbParameter("LastName", txtLastName.Text));

    // Выполните команду.
    Conn.Open();
    cmd.ExecuteNonQuery();
    ...

Этот код создает новый объект OleDbCommand для выполнения инструкции SQL INSERT на объекте соединения Conn. Он создает параметры, содержащие значения, которые необходимо вставить для полей FirstName и LastName, открывает соединение и выполняет команду.

Когда выполняется ExecuteNonQuery, база данных вставляет новую запись с данными FirstName и LastName. Поле StudentId является полем autonumber, поэтому его значение автоматически создается базой данных.

Часто следующее, что нужно сделать программе, - это работать с этой записью. К сожалению, он не знает, какое значение было присвоено поле с автозапусками. Если другие поля могут однозначно идентифицировать запись, это не проблема. Вы можете просто найти эти значения, чтобы получить вновь созданную запись. К сожалению, поля autonumber часто используются для уникальной идентификации записей. (Например, как идентификаторы студентов, клиентов и сотрудников.)

Итак, как вы можете найти новую запись, если поле autonumber является единственным уникальным идентификатором? Однако в программе C#, работающей с базой данных Access (возможно, не в более старых версиях Access), вы можете выполнить запрос SELECT @@ IDENTITY, чтобы получить добавленное значение автономера.

После того, как он использует предыдущий код для создания новой записи Students, в этом примере используется следующий код для извлечения и отображения нового значения StudentId.

    ...
    // Получить значение autonumber.
    cmd = new OleDbCommand("SELECT @@IDENTITY", Conn);
    OleDbDataReader reader = cmd.ExecuteReader();

    // Прочитайте значение.
    if (!reader.Read())
    {
        MessageBox.Show("Error reading the autonumber value");
    }
    else
    {
        // Отображение идентификатора StudentID и других значений.
        txtFirstNameResult.Text = txtFirstName.Text;
        txtLastNameResult.Text = txtLastName.Text;
        txtStudentId.Text = reader.GetValue(0).ToString();

        // Очистите поля ввода.
        txtFirstName.Clear();
        txtLastName.Clear();
    }

    // Закройте соединение.
    cmd.Dispose();
    Conn.Close();
}

Этот код создает новый объект OleDbCommand для выполнения запроса SELECT @@ IDENTITY и выполняет его. Результатом метода ExceuteQuery является объект OleDbDataReader, который позволяет просматривать полученные результаты. Затем код вызывает метод Read объекта, чтобы перейти к первой (и единственной) записи в результатах. Он получает первое (и единственное) значение в результате, которое является значением autonumber. Наконец, код отображает значения первого и последнего имени вместе со значением вновь созданного StudentId.

Источник: http://csharphelper.com/blog/2016/03/get-an-autonumber-value-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector