Получите значение автонабора, которое только что было вставлено в 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.
