Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get auto_increment id from table

I have this code:

string conStr = ConfigurationManager.ConnectionStrings["BackgammonGame"].ConnectionString;
            SqlConnection con = new SqlConnection(conStr);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;

            con.Open();
            cmd.CommandText = ("INSERT INTO Game (playerA, playerB) OUTPUT INSERTED.gameID VALUES (@playerA, @playerB)");

            cmd.Parameters.Add("@playerA", SqlDbType.NVarChar).Value = firstPlayer;
            cmd.Parameters.Add("@playerB", SqlDbType.NVarChar).Value = secondPlayer;

            cmd.ExecuteNonQuery();

            int id = (int)cmd.ExecuteScalar();
            con.Close();

When I insert into this table, I have an auto_increment int primary key column called gameID, and I declared in the sql statement that I want the gameID in output. my problem is that when I write this line in the code: int id = (int)cmd.ExecuteScalar(); the inserted parameters apear twice in the table (2 rows with the same info.), but when I delete it it's ok.

I need this row so I can use this id in other table.

like image 927
Shimrit Revivo Avatar asked May 06 '26 13:05

Shimrit Revivo


1 Answers

Change your command text with this and try

cmd.CommandText = ("INSERT INTO Game (playerA, playerB) VALUES (@playerA,@playerB); 
                     SELECT  SCOPE_IDENTITY()"); 

SCOPE IDENTITY returns the identity value of last inserted row. Hence that will returns the identity filed of the inserted row using the insert query

EDIT

You are executing the query two times

cmd.ExecuteNonQuery(); // Avoid this
int id = (int)cmd.ExecuteScalar();// This is enough

In both case your query gets executed and it cause insertion twice. ExecuteNonQuery() will execute the insert query and will returns the number of rows affected.

Where as ExecuteScalar() will return the result of the select scope_identity() staement which is the identity column of the inserted row.

Here is your code

 con.Open();
 cmd.CommandText = ("INSERT INTO Game (playerA, playerB) VALUES (@playerA,@playerB); 
                     SELECT  SCOPE_IDENTITY()"); 

 cmd.Parameters.Add("@playerA", SqlDbType.NVarChar).Value = firstPlayer;
 cmd.Parameters.Add("@playerB", SqlDbType.NVarChar).Value = secondPlayer;

 int id = Convert.ToInt32(cmd.ExecuteScalar());
 con.Close();
like image 68
Nithesh Narayanan Avatar answered May 08 '26 03:05

Nithesh Narayanan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!