2015-11-23 455 views
0

Team & Team User Database Tables創作團隊及團隊用戶的

我與ASP.net & C#的工作創造一個體育聯盟球員轉會申請。我目前正在註冊頁面上工作,我想一次性完成,即註冊一個新團隊&聯繫人。我的問題是Team_ID需要進入「Team_User」表,將兩個表連接在一起。問題是我想不出任何兩個表都是唯一的,我可以設置一個查詢來查找「Team」表中的Team_ID。有任何想法嗎?

編輯:Team_ID是在將新團隊添加到表格時自動生成的。 我試過這個,我似乎無法得到它的工作。

// define connection string and SQL query as strings 
      string connectionString = ConfigurationManager.ConnectionStrings["Web_FussConnectionString"].ConnectionString; 
      string query = "INSERT INTO Team (League_ID, Team_Name, Address_1, Stadium) values (@League_ID, @Team_Name, @Address_1, @Stadium) & SET @Team_ID = SCOPE_IDENTITY()"; 
      string query1 = "INSERT INTO Team_User (Team_ID, First_Name, Job_Title, Telephone_Number, Email, Password_1, Last_Name) values (@Team_ID, @First_Name, @Job_Title, @Telephone_Number, @Email, @Password_1, @Last_Name)"; 
      // set up SqlConnection and SqlCommand in "using" blocks 
      using (SqlConnection con = new SqlConnection(connectionString)) 
      using (SqlCommand cmd = new SqlCommand(query, con)) 
      using (SqlCommand cmd1 = new SqlCommand(query1, con)) 
      { 
       // define and fill parameters 
       cmd.Parameters.Add("@League_ID", SqlDbType.Int).Value = Session["League_ID"]; 
       cmd.Parameters.Add("@Team_Name", SqlDbType.VarChar, 50).Value = TextBoxName.Text; 
       cmd.Parameters.Add("@Address_1", SqlDbType.VarChar, 50).Value = TextBoxAddress.Text; 
       cmd.Parameters.Add("@Stadium", SqlDbType.VarChar, 50).Value = TextBoxType.Text; 
       int @Team_Id = Convert.ToInt32(cmd.Parameters["@Team_ID"].Value); 
       cmd1.Parameters.Add("@First_Name", SqlDbType.VarChar, 50).Value = TextBoxContactName.Text; 
       cmd1.Parameters.Add("@Job_Title", SqlDbType.VarChar, 50).Value = TextBoxTitle.Text; 
       cmd1.Parameters.Add("@Telephone_Number", SqlDbType.Int).Value = TextBoxNumber.Text; 
       cmd1.Parameters.Add("@Email", SqlDbType.VarChar, 50).Value = TextBoxEmail.Text; 
       cmd1.Parameters.Add("@Password_1", SqlDbType.VarChar, 50).Value = TextBoxPassword.Text; 
       cmd1.Parameters.Add("@Last_Name", SqlDbType.VarChar, 50).Value = TextBoxContactLastName; 
       // open connection, execute Non Query, close connection 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
       cmd1.ExecuteNonQuery(); 
       con.Close(); 
      } 

回答

2
declare @new_team_id int 

-- insert into Team statement 

set @new_team_id = (select scope_identity()) 

-- Insert new team id into Team_User 

瞭解更多關於scope_identity()

@new_team_id上面是你剛插入的團隊ID的價值。

編輯:基於問題編輯。

您的代碼不工作,因爲您沒有使用輸出參數。您需要告訴命令對象@Team_Id將用作輸出參數,其值將在調用代碼中讀取。請看這裏怎麼做http://blogs.msdn.com/b/spike/archive/2009/05/07/a-simple-example-on-how-to-get-return-and-out-parameter-values-using-ado-net.aspx

建議:我仍然會建議與另一種方法。您已經預先獲得了所有的值(Team和Team_User條目詳細信息)。只需要一個接受所有參數並一次插入兩條記錄的過程。上面已經提到了SP邏輯。

+0

FWIW這是一個正確的答案,但如果你需要多行:'INSERT INTO隊...輸出inserted.Id,... INTO TeamUser ...' –

+0

你也可以使用'選擇@new_team_id = scope_identity();' - 不需要'SET'和'SELECT' - 一個就足夠了 –

+0

請介意看看我的編輯:) – Haldamir

-1

如果您使用實體框架,它會爲您找到標識符。

var team = new Team() 
{ 
    -- populate fields 
}; 
var user = new Team_User() 
{ 
    -- populate fields 
}; 
team.Team_Users.Add(user); 
dbContext.Teams.Add(team); 
dbContext.SaveChanges();