Rob¡nUters Ответов: 2

C# как вставить значения из одной базы данных в другую


Привет,

Я создаю приложение, которое по умолчанию будет работать с базой данных. SDF. Есть возможности изменить его на SQL я сделал это все работает нормально только я вставлю информацию из базы данных а в базу данных А. Я создал DataReader, и он вставит 1 запись в базу данных B, но я буду все записи в базе данных. Кто-нибудь знает, как я могу это исправить?

Что я уже пробовал:

Это мой код;

void InitUsers()
           {

               string query = "SELECT u.firstname, u.middlename, u.lastname, u.ID, w.value FROM User_ u " +
               "INNER JOIN WiegandUserValue w " +
               "ON u.ID = w.OWNERID ";

               SqlConnection sqlUser = new SqlConnection("Data Source=XXXX;Initial Catalog=XXXXX;User ID=XXXX;Password=XXXX");
               sqlUser.Open();

               SqlCommand command = new SqlCommand(query, sqlUser);
               using (SqlDataReader read = command.ExecuteReader())
               {
                   if (read.HasRows)
                   {
                       while (read.Read())
                       {
                           ID = (read["ID"].ToString());
                           Firstname = (read["FirstName"].ToString());
                           Middlename = (read["MiddleName"].ToString());
                           Lastname = (read["LastName"].ToString());
                           Badge = (read["Value"].ToString());
                       }
                   }

               }

               sqlUser.Close();

           }

public void SQLQuery()
       {
           SqlConnection sc = new SqlConnection(GetConnectionString());
           //try
           //{
               sc.Open();

               string FC = "0";
               string AccGrp = "1";
               //string FC = TB_FacilityCode.Text;
               //string AccGrp = TB_AccGrp.Text;
               //int AccGrp = ((AccessGroup)CB_AccessGroup.SelectedItem).GroupNr;
               //string query1 = string.Format("DELETE FROM Badge WHERE Userfield1 = 'CABB'");
               string query = string.Format("DELETE FROM Badge WHERE Userfield1 = 'CABB'" +
                   "INSERT INTO Badge (FrstName,Middlename,Lastname,Badge,Enabled,Resident,Initload,AGroup1,Facility,Userfield1) " +
                   "VALUES(@firstname,@middlename,@lastname,@badge,1,1,1,{0},{1},'CABB')" +
                   "INSERT INTO SERVER (Record,Val1,Val2,Val3,Val4,Val5) VALUES(16,0,@badge,0,0,0)"

                               , AccGrp        //0
                               , FC            //1

                   );
               SqlCommand command = new SqlCommand(query, sc);

               command.Parameters.AddWithValue("@firstname", Firstname ?? (object)DBNull.Value);
               command.Parameters.AddWithValue("@middlename", Middlename ?? (object)DBNull.Value);
               command.Parameters.AddWithValue("@lastname", Lastname ?? (object)DBNull.Value);
               command.Parameters.AddWithValue("@badge", Badge ?? (object)DBNull.Value);
               command.ExecuteNonQuery();
           //}
           //catch (Exception ex)
           //{
           //    MessageBox.Show(ex.Message);
           //}
           sc.Close();

     private void B_Insert_Click(object sender, EventArgs e)
       {
           SQLQuery();
       }

2 Ответов

Рейтинг:
2

RickZeeland

Просто используйте петлю для .ExecuteReader, вот пример: [sqldatareader]
В этом цикле выполните другую команду с помощью ExecuteNonQuery чтобы вставить строку чтения в целевую базу данных, см.: ExecuteNonQuery не вставляет строки в базу данных - C# | Dream. In. Code[^]


Rob¡nUters

Есть у меня это или нет? Похоже на то же самое

RickZeeland

Я не видел вашей петли, может быть, вы добавили ее позже ? Если нет, я удалю свое решение.

Rob¡nUters

Я думал, что это было ниже кода while..

Rob¡nUters

@RickZeeland у тебя есть для меня несколько советов?

RickZeeland

Более элегантный способ, возможно, заключается в использовании SELECT INTO, см. пример здесь: https://www.mssqltips.com/sqlservertutorial/2523/insert-into-new-sql-table-with-select-into/
Если я хорошо помню, это также может быть использовано в разных базах данных.

Rob¡nUters

Я хотел бы чтобы это было лучшее решение только у меня есть 2 разные базы данных даже 2 разные таблицы
1. имя, отчество, фамилия, идентификатор
2. Firstname, Middlename, Lastname, PersonalID

кроме того, во вторую базу данных мне нужно вставить больше информации о столбце, которую я могу выбрать из базы данных 1.

Рейтинг:
1

RickZeeland

Возможно, более элегантный способ-использовать SELECT INTO, см. пример здесь:
Вставить в новую таблицу SQL с помощью SELECT INTO[^]
Если я хорошо помню, это также может быть использовано в разных базах данных, см. пример здесь: SQL SELECT INTO оператор[^]


Rob¡nUters

Я хотел бы чтобы это было лучшее решение только у меня есть 2 разные базы данных даже 2 разные таблицы
1. имя, отчество, фамилия, идентификатор
2. Firstname, Middlename, Lastname, PersonalID

кроме того, во вторую базу данных мне нужно вставить больше информации о столбце, которую я могу выбрать из базы данных 1.