В рамках собственного проекта работаю с БД на MySQL через C#. С помощью коннектора оперирую чистыми запросами, передавая их как строку. Идентификаторами кортежей (первичными ключами) управляет сама база (auto_increment
). Обычный код по добавлению у меня выглядит так:
public void PutPet()
{
if (string.IsNullOrEmpty(PatientID)
|| string.IsNullOrEmpty(Alias)
|| string.IsNullOrEmpty(Form))
{
throw new ArgumentException();
}
string CommandText =
"insert into " + TABLE_NAME +
"(" + ATRIBUTE_PATIENT_ID +
", " + ATRIBUTE_ALIAS +
", " + ATRIBUTE_FORM +
", " + ATRIBUTE_MF +
", " + ATRIBUTE_BORN_DATE +
", " + ATRIBUTE_STATUS +
") values('" + PatientID +
"','" + Alias +
"','" + Form +
"','" + MF +
"','" + BornDate +
"','" + Status + "')";//команда
MySqlConnection myConnection = new MySqlConnection(DataBaseManager.GetConnectLine());//создаем объект для подключения
MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection);//создаем объект передачи команды
myConnection.Open();//открываем подключение
myCommand.ExecuteNonQuery();//передаем команду
myConnection.Close();//закрываем подключение
}
Однако метод ExecuteNonQuery()
возвращает только число затронутых строк. Какой метод мне использовать, чтобы добавить и получить объект, добавленный в БД, со сгенерированным идентификатором? И есть-ли такой метод вообще?
Для того чтобы получить последнее значение id
при автоинкременте обычно используется LAST_INSERT_ID()
.
Например:
SELECT LAST_INSERT_ID();
Но... Как такая система будет вести себя в многопользовательской среде? Вопрос риторический.
Более разумно поработать со структурой таблицы (например, вместо автоинкрементного id
генерировать GUID перед добавлением) или как сказали ранее в комментариях, используйте ORM.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть алгоритм поиска, который возвращает List<string> с путями к найденным файламХочется создать окно, в которое будет передаваться результаты...
Вопрос новичка в javascript'е и Electron'еПростой пример из урока про асинхронную загрузку скрипта: