2015-11-04 5 views
5

Ho il seguente C#Ottieni il nuovo ID della chiave primaria del record dalla query di inserimento SQL per inserire lo stesso valore in un'altra tabella?

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(); 
} 

Nella tabella teams la chiave primaria è team_id voglio essere in grado di tirare il valore di questo e di inserirlo nel campo team_id nella tabella di ricerca che ho sprints_vs_teams. Esiste un metodo per farlo, in tal caso potresti eventualmente fornirmi alcune indicazioni, per favore sappi che sono molto nuovo a C#. Qualsiasi aiuto sarebbe molto apprezzato.

codice Modificato

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(); 
} 

ho modificato il mio codice con la risposta s' @Sick, tuttavia non sembra funzionare. Se qualcuno potesse consigliarmi su dove potrei aver sbagliato, sarebbe molto apprezzato.

+0

Si prega di elaborare su "non mi sembrava a lavorare". Un errore? Nessun dato inserito? I dati errati inseriti? – AakashM

risposta

4

Usa 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)" 
+0

Grazie per la risposta, ho aggiunto questo al mio codice anche se sfortunatamente non sembra funzionare. Ho aggiunto il mio codice modificato alla mia domanda, potresti consigliarti su dove potrei aver sbagliato? – mcclosa

+0

@mcclosa - Si prega di avvolgere queste istruzioni SQL in un SP ed eseguirlo. –

+0

@RahulSingh Scusate, come ho detto nella mia domanda, sono molto nuovo in C# e programmazione in generale, quindi non sono sicuro di come farlo. Potresti fornirmi una guida? – mcclosa

0

Se non mi sbaglio, si deve dichiarare team_identity come cmd.parameter. Naturalmente non v'è alcuna param passata in esso C# è ancora in attesa di una

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

O qualcosa del genere

0

dopo aver inserito una riga nella teams tavolo, scrivere il seguente codice per ottenere il valore corrente della identità e della utilizzarlo durante l'inserimento nella tabella sprints_vs_teams.

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

Speranza che aiuta

Problemi correlati