#c# #sql-server #database #visual-studio
Вопрос:
Я новичок на этом сайте. У меня небольшая проблема с C #. Мне нужно знать, как вставлять данные в несколько таблиц SQL Server с помощью C #. Английский не мой родной язык, поэтому извините, если есть некоторые орфографические ошибки.
Это мой код на C #
try
{
Sqlconn.Open();
SqlCommand cmd = Sqlconn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "insert into New_Vehicle values ('" txt_id.Text "', '" txtV_No.Text "', '" txtE_No.Text "', '" dtm_Year.Text "')";
cmd.ExecuteNonQuery();
cmd.CommandText = "insert into New_Brand values ('" txt_id.Text "', '" txtB_Name.Text "', '" txt_Model_Name.Text "', '" txtV_Type.Text "')";
cmd.ExecuteNonQuery();
Sqlconn.Close();
MessageBox.Show("Seve Record Succesfull", "Insert Message");
}
catch (Exception EX)
{
MessageBox.Show("Error" EX);
}
Это ошибка, которую я получаю при запуске этого кода. Пожалуйста, помогите, как решить эту проблему
Комментарии:
1. пожалуйста, используйте параметризованные запросы — построение SQL-запросов путем конкатенации и т. Д. — Это путь к катастрофе. это не только источник многих сложных для отладки синтаксических ошибок, но и широкие возможности для атак с использованием SQL-инъекций .
2. Для создания бренда вам нужен новый идентификатор транспортного средства. Есть способы получить идентификатор из результата ВСТАВКИ, я оставлю это для вашего исследования. Однако не имеет смысла, что бренду потребуется идентификатор транспортного средства, поэтому я думаю, вам следует переосмыслить дизайн базы данных. А также то, что сказал @FranzGleichmann.
3. Поскольку оператор Insert выдает ошибку с внешним ключом (FK) для New_Brand , это может быть связано с тем, что вы сначала вставляете транспортное средство, а затем вставляете новую марку. Если вы изменили порядок вставок (New_Brand затем New_Vehicle), ваш код может работать. Как сказал Остин, невозможно определить, не увидев определения таблиц.
Ответ №1:
Я бы перебрал каждую таблицу с помощью цикла foreach и запустил код вставки, который у вас есть, но использовал имя таблицы из цикла foreach
для этого вам понадобится список объектов таблицы, каждый со свойством «Name», которое содержит имя таблицы, совпадающее с именем таблицы в базе данных
foreach (var table in List_Of_Tables)
{
cmd.CommandText = "insert into " table.Name " values ('" txt_id.Text "', '" txtV_No.Text "', '" txtE_No.Text "', '" dtm_Year.Text "')";
cmd.ExecuteNonQuery();
}