2013-11-17 3 views
0

Я хотел бы получить все записи из таблицы базы данных с заданным значением (пример: UserType значение равно 1).Извлечение выбранных пользователей и их сохранение в другую таблицу

Я хочу, чтобы все пользователи получили 1 как UserType, а затем сохранили его, который затем будет использоваться в инструкции insert в другой таблице.

Обработанных пользователей следует вставить в другую таблицу, используя их UserID. и я думаю о том, чтобы сначала выбрать пользователей, а затем использовать циклы для ввода их в таблицу, но я не знаю, как это сделать.

Вот пример кода, который я буду использовать при вставке пользователей в другую таблицу.

con.Open(); 
SqlCommand com = new SqlCommand(); 
com.Connection = con; 
com.CommandText = "INSERT INTO Messages VALUES (@MessageTo, @Subject)"; 

com.Parameters.Add("@MessageTo", SqlDbType.Int); 
com.Parameters.Add("@Subject", SqlDbType.NVarChar); 

com.Parameters[0].Value = //this is where the userIDs of the users selected should be entered 
com.Parameters[1].Value = "test"; 

com.ExecuteNonQuery(); 

con.Close(); 

ответ

0

Прежде всего это будет 3-4-строчный ответ с Entity Framework. Это здорово и делает все. Когда вы очень хорошо разбираетесь в своих собственных командах sql, дайте этот снимок.

Итак, давайте предположим, что вы сделали свой код таким образом (псевдо код):

public class User // a class for holding details about a user 
{ 
    public int UserID {get;set;} 
    //others 
} 

// a list holding the users you want to insert 
List<User> usersToInsert = new List<User>(); 

// get the users in some way 
usersToInsert = TheSelectStatementToGetUsersToInsert(); 

Теперь вам нужно один за одним вставить тех пользователей в базу данных. Используйте петлю foreach на usersToInsert.

foreach (var user in usersToInsert) 
{ 
    con.Open(); 
    SqlCommand com = new SqlCommand(); 
    com.Connection = con; 
    com.CommandText = "INSERT INTO Messages VALUES (@MessageTo, @Subject)"; 

    com.Parameters.Add("@MessageTo", SqlDbType.Int); 
    com.Parameters.Add("@Subject", SqlDbType.NVarChar); 

    // this is where you use the iterator variable 
    com.Parameters[0].Value = user.UserID; 
    com.Parameters[1].Value = "test"; 

    com.ExecuteNonQuery(); 

    con.Close(); 
}  

Это также хорошо выглядеть в having using statements для SqlCommand и SqlConnection переменных. Они всегда будут закрывать соединение, поэтому вам не нужно его забывать.

+0

Спасибо за вышеуказанный ответ. Я просто хотел бы уточнить, где я должен поставить инструкцию SELECT для всех этих пользователей? он будет находиться под TheSelectStatementToGetUsersToInsert(); например, я собираюсь создать новый метод private void TheSelectStatementToGetUsersToInsert(); а затем использовать его в usersToInsert? –

+0

Да, оператор 'select', чтобы пользователи попадали в эту« область ». Я просто использовал метод в качестве примера. Вы можете просто вставить этот код и присвоить результаты переменной списка. Хотя я бы предложил сделать метод, чтобы предотвратить мили-долгие методы. – gunr2171

+0

@CharlesTan, и если вы сделали метод, это будет 'private List SomeMethodName()', потому что вы хотите вернуть список «Пользователи». – gunr2171

Смежные вопросы