【问题标题】:Get the new record primary key ID from SQL insert query to insert same value into another table?从 SQL 插入查询中获取新的记录主键 ID 以将相同的值插入另一个表?
【发布时间】:2015-11-04 02:43:55
【问题描述】:

我有以下 C#

protected void add_button_Click(object sender, EventArgs e)
{
    string teamname = team_name_tb.Text;
    string teamstatus = "Not Started";
    string teamnotes = team_notes_tb.Text;
    string sprintid = sprint_select.SelectedValue;

    string ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    SqlConnection myConnection = new SqlConnection(ConnectionString);

    myConnection.Open();

            String query = "INSERT INTO teams (team_name, status, notes) 
                            VALUES (@team_name, @status, @notes); 
                            INSERT INTO sprints_vs_teams (sprint_id, team_id)                    
                            VALUES (@sprint_id, @team_id)";

            SqlCommand myCommand = new SqlCommand(query, myConnection);
            myCommand.Parameters.AddWithValue("@team_name", teamname);
            myCommand.Parameters.AddWithValue("@status", teamstatus);
            myCommand.Parameters.AddWithValue("@notes", teamnotes);
            myCommand.Parameters.AddWithValue("@sprint_id", sprintid);
            myCommand.Parameters.AddWithValue("@team_id", ????);

            myCommand.ExecuteNonQuery();
            myConnection.Close();
}

在teams 表中,主键是team_id 我希望能够提取它的值并将其插入到查找表中的team_id 字段中我有sprints_vs_teams。有没有一种方法可以做到这一点,如果可以的话,您能否为我提供一些指导,请注意我对 C# 很陌生。任何帮助将不胜感激。

修改代码

protected void add_button_Click(object sender, EventArgs e)
{
    String user = Session["user_id"].ToString();
    string teamname = team_name_tb.Text;
    string teamstatus = "Not Started";
    string teamnotes = team_notes_tb.Text;
    string sprintid = sprint_select.SelectedValue;

string ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection myConnection = new SqlConnection(ConnectionString);

myConnection.Open();

String query = "Declare @team_identity int INSERT INTO teams (team_name, status, notes) VALUES (@team_name, @status, @notes); set @team_identity = scope_identity() INSERT INTO sprints_vs_teams (sprint_id, team_id) VALUES (@sprint_id, @team_identity)";

       SqlCommand myCommand = new SqlCommand(query, myConnection);
        myCommand.Parameters.AddWithValue("@team_name", teamname);
        myCommand.Parameters.AddWithValue("@status", teamstatus);
        myCommand.Parameters.AddWithValue("@notes", teamnotes);
        myCommand.Parameters.AddWithValue("@sprint_id", sprintid);

        myCommand.ExecuteNonQuery();
        myConnection.Close();
}

我用@Sick 的回答修改了我的代码,但它似乎没有用。如果有人能就我可能出错的地方提出建议,将不胜感激。

【问题讨论】:

  • 请详细说明“它似乎不起作用”。一个错误?没有插入数据?插入了错误的数据?

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


【解决方案1】:

使用SCOPE_IDENTITY

Declare @team_identity int

INSERT INTO teams (team_name, status, notes) 
                            VALUES (@team_name, @status, @notes);

set @team_identity = scope_identity()

INSERT INTO sprints_vs_teams (sprint_id, team_id)                    
                            VALUES (@sprint_id, @team_identity)"

【讨论】:

  • 感谢您的回答,我将其添加到我的代码中,但不幸的是它似乎不起作用。我将修改后的代码添加到我的问题中,您能否建议我可能出错的地方?
  • @mcclosa - 请将这些 SQL 语句包装到 SP 中并执行它。
  • @RahulSingh 抱歉,正如我在问题中提到的,我对 C# 和一般编程非常陌生,所以我不知道该怎么做。你能给我一些指导吗?
  • @mcclosa - 嘿,这很简单,请参考siome基础教程,你会得到很多。
  • @RahulSingh 我环顾四周,但我不确定它如何直接链接到我正在做的事情以及我的代码当前不正确的位置。这是简单的几行代码还是比这更复杂?再次抱歉,完成新手,我没有太多时间来完成这部分项目。
【解决方案2】:

如果我没记错的话,你必须将 team_identity 声明为 cmd.parameter。当然没有参数传递给它 c# 仍然期待一个

cmd.paramater.addwithvalue("@team_identity", paramaterDirection.out);

或者类似的东西

【讨论】:

    【解决方案3】:

    在teams表中插入一行后,编写以下代码来获取identity的当前值,并在插入sprints_vs_teams表时使用它。

    SqlCommand cmd=new SqlCommand("select Ident_current('teams')",Cn);
    Cn.Open();
    int teamid=int.Parse(Cmd.ExecuteScalar().ToString());
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2014-08-09
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      相关资源
      最近更新 更多