2015-11-23 264 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();