Получите значение автонабора, которое только что было вставлено в 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 tt >. Во время разработки я добавил эту базу данных в проект, установил свойство «Свойство сборки» в «Содержимое» и установил для своего свойства «Копировать в выходной каталог» значение «Копировать, если новый», чтобы база данных автоматически копировалась в исполняемый каталог. р>
Хорошо, вернемся к автонументированию.
Чтобы создать новую запись в таблице с полем автонабора, просто не указывайте значение для этого поля, и база данных автоматически генерирует ее. Если вы вводите значения первого и последнего имени и нажмите «Создать», в этом примере используется следующий фрагмент кода для создания новой записи таблицы 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.