2014-09-17 3 views
0

У меня есть 2 таблицы;Как получить идентификатор пользователя из таблицы 1 и вставить этот идентификатор в таблицу 2

  1. Person >> Id (PK) (Идентичность = да), Имя пользователя, ....
  2. Barcode >> Id (FK), штрих-код, ....

Я хочу чтобы получить идентификатор из таблицы 1 по сеансу (сеанс будет именем пользователя) и вставить этот идентификатор в таблицу 2. Например, если username==session был истинным Идентификатором вставлен, если не выбрасывать исключение. Я хочу, чтобы идентификатор таблицы 1, вставленный в таблицу2, имел отношение к тому же имени пользователя, которое было в сеансе. найти ниже мою работу на данный момент;


public class Service1 : IService1 
    { 
     public string InsertUserDetails(UserDetails userInfo) 
     { 
      string Message; 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["BCSConnectionString"].ConnectionString; 
      con.Open(); 
      bool exists = false; 
      using (SqlCommand cmd = new SqlCommand("select Id from [Person] where username = @session", con)) 
      { 
       cmd.Parameters.AddWithValue("@session", userInfo.Session); 
       ????? 
      } 
      if (exists) 
       Message = userInfo.Session + "The User Name has not been Registered...!"; 
      else 
      { 
       using (SqlCommand cmd = new SqlCommand("INSERT INTO Barcode (Id,Barcode,DateTime) values (@Id,@Barcode,@Datetime)", con)) 
       { 
        cmd.Parameters.AddWithValue("Id", userInfo.Id); 
        cmd.Parameters.AddWithValue("Barcode", userInfo.Barcode); 
        cmd.Parameters.AddWithValue("Datetime", userInfo.Datetime); 
        cmd.Parameters.AddWithValue("Vehicle", userInfo.Vehicle); 
        cmd.ExecuteNonQuery(); 
        Message = userInfo.Barcode + "All of data Registered "; 
       } 
      } 
      con.Close(); 
      return Message; 
     } 
    } 

ответ

1

Я предполагаю, что ваш Id столбец целое и ваш запрос SELECT возврат одна ячейка, то вы можете использовать ExecuteScalar метод, чтобы получить это значение.

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

int id; 
using (SqlCommand cmd = new SqlCommand("select Id from [Person] where username = @session", con)) 
{ 
    cmd.Parameters.AddWithValue("@session", userInfo.Session); 
    id = (int)cmd.ExecuteScalar(); 
} 

Затем вы можете использовать эту id значение в вашем INSERT заявлении, как вы делали в вашем примере, как;

using (SqlCommand cmd = new SqlCommand("INSERT INTO Barcode (Id,Barcode,DateTime) values (@Id,@Barcode,@Datetime)", con)) 
{ 
    cmd.Parameters.AddWithValue("@Id", id); 
    ... 
    cmd.ExecuteNonQuery(); 
} 

Кроме того, я предлагаю использовать using заявление распоряжаться вашей SqlConnection также.

+0

спасибо за ваш комментарий, как я могу вставить тот же идентификатор (выбранный из таблицы 1) в таблицу 2 (штрих-код) по SqlCommand cmd? – aziz

+0

@aziz Вам просто нужно передать это значение в качестве параметра в инструкции 'INSERT'. И вы уверены, что хотите вставить это значение в столбец 'Barcode'? Разве это не столбец 'Id'? –

+0

спасибо, но когда я использую этот код cmd.Parameters.AddWithValue ("@ Id", id); Идентификатор имени не существует в текущем контексте – aziz

1

SqlCommand.ExecuteScalar вам нужно получить Id.

Помните, что вам нужно отбросить полученное значение в нужный вам тип данных.

int iID = (int)cmd.ExecuteScalar(); 

Я предлагаю следующие изменения:

  1. Добавить using блок для SqlConnection, а также.
  2. Использовать одиночный SqlCommand
  3. Удалить существующие параметры перед добавлением параметров для 2-го SqlCommand.

Код:

public string InsertUserDetails(UserDetails userInfo) 
    { 
     string Message; 
     using (SqlConnection con = new SqlConnection()) 
     { 
      con.ConnectionString = ConfigurationManager.ConnectionStrings["BCSConnectionString"].ConnectionString; 
      con.Open();  

      using (SqlCommand cmd = new SqlCommand("select Id from [Person] where username = @session", con)) 
      { 
        cmd.Parameters.AddWithValue("@session", userInfo.Session); 
        int iID = (int)cmd.ExecuteScalar(); 

        if(iID > 0) //check with reference to return ID 
        { 
        cmd.Parameters.Clear(); 
        cmd.CommandText = "INSERT INTO Barcode (Id,Barcode,DateTime) values (@Id,@Barcode,@Datetime)"; 
        cmd.Parameters.AddWithValue("@Id", iID); 
        cmd.Parameters.AddWithValue("@Barcode", userInfo.Barcode); 
        cmd.Parameters.AddWithValue("@Datetime", userInfo.Datetime); 
        cmd.Parameters.AddWithValue("@Vehicle", userInfo.Vehicle); 
        cmd.ExecuteNonQuery(); 
        Message = userInfo.Barcode + "All of data Registered ";       
        }     
        else 
        Message = userInfo.Session + "The User Name has not been Registered...!"; 
      } 
     } 
     return Message; 
    } 
Смежные вопросы