创建团队&团队用户在一个SQL查询中

时间:2015-11-23 09:49:29

标签: c# sql asp.net sql-server

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 个答案:

答案 0 :(得分: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逻辑。

答案 1 :(得分:-1)

如果您使用Entity Framework,它将为您提供标识符。

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