2013-11-25 5 views
3

У меня есть следующие команды Insert, и мне нужно, чтобы захватить Scope Идентичность для некоторого отслеживания заказа позже в приложенииПочему оператор SQL «INSERT» выполняется дважды?

SqlCommand cmd1 = new SqlCommand("INSERT INTO [pharm_OrderID](UserID, RequestType, CreateDate) values (@UserID, @RequestType, @CreateDate); Select SCOPE_IDENTITY();", conn1); 
        cmd1.CommandType = CommandType.Text; 
        conn1.Open(); 

        string strUserID = txtEmpID.Text; 
        cmd1.Parameters.Add("@UserID", SqlDbType.NVarChar, 50); 
        cmd1.Parameters["@UserID"].Value = strUserID; 

        string strRequestType = ddlReturnType.SelectedValue; 
        cmd1.Parameters.Add("@RequestType", SqlDbType.NVarChar, 50); 
        cmd1.Parameters["@RequestType"].Value = strRequestType; 

        string strCreateDate = lblOrderAttemptTime.Text; 
        cmd1.Parameters.Add("@CreateDate", SqlDbType.NVarChar, 50); 
        cmd1.Parameters["@CreateDate"].Value = strCreateDate; 

        cmd1.ExecuteNonQuery(); 

        string numScope = Convert.ToString(cmd1.ExecuteScalar()); 
        lblOrderNum.Text = numScope; 
        cmd1.Dispose(); 
        conn1.Close(); 
        conn1.Dispose(); 

Но почему это вставить в два раза?

+1

Совет. Возможно, вы захотите изучить инструкцию 'using' для обработки экземпляров соединения и команд. – HABO

ответ

14

Вы выполняете дважды

  1. cmd1.ExecuteNonQuery();
  2. Convert.ToString(cmd1.ExecuteScalar());

Вам просто нужно ExecuteScalar вставить и выберите:

decimal newID = (decimal) cmd1.ExecuteScalar(); 
2

Потому что ты выполнил его в два раза; один раз как ExecuteNonQuery() и один раз как ExecuteScalar().

2

потому, что вы выполняете его дважды:

cmd1.ExecuteNonQuery(); //once 

    string numScope = Convert.ToString(cmd1.ExecuteScalar()); //twice 

Избавьтесь от cmd1.ExecuteNonQuery(); и просто использовать ExecuteScalar().

2

Причина, по которой ваш запрос выполняется дважды, заключается в том, что вы вызываете оба объекта ExecuteNonQuery
и ExecuteScalar на свой объект команды.

2

Это потому, что вы выполняете его дважды.

Первая здесь:

cmd1.ExecuteNonQuery(); 

Тогда здесь:

string numScope = Convert.ToString(cmd1.ExecuteScalar()); 

Удалить первый.

0

Вы выполняете его дважды.

cmd1.ExecuteNonQuery(); // 1st 

string numScope = Convert.ToString(cmd1.ExecuteScalar()); // 2nd 

Удалите один из них.

Смежные вопросы