Как вставить данные в несколько таблиц SQL Server с помощью C #?

#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();
    }