2014-10-26 2 views
0

Я уже через пару недель прошел через все, чтобы найти заявления, работающие на уровне базы данных. Ниже мой код, и я чувствую, что я очень близко к ответу, но продолжаю получать -1, возвращенный с SCOPE_IDENTITY(). Customer_Name экономит место на столе, просто отлично с автоматическим приращением. Мне просто нужен Customer_ID, так что я могу разместить его в таблице Customer_Address для идентификации адреса одному до многих.Прочитанный идентификатор последнего вставленного

Заранее за вашу помощь.

if (customer_ID == "") 
{ 
    // add new customer 
    string SQL = "INSERT INTO Customer (Customer_Name) VALUES (@customer_Name)"; 
    SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection); 
    sqlCommand.Parameters.Add("@customer_Name", SqlDbType.VarChar, 100).Value = customer_Name; 

    // get last inserted Customer_ID 
    string SQL_customerId = "SELECT SCOPE_IDENTITY()"; 
    SqlCommand sqlCommand_customerId = new SqlCommand(SQL_customerId, sqlConnection); 

    sqlConnection.Open(); 
    sqlCommand.ExecuteNonQuery(); 
    sqlCommand_customerId.ExecuteNonQuery(); 

    // string SQL_ = "SELECT Customer_ID FROM Customer"; 
    // SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection); 
    // int maxId = Convert.ToInt32(sqlCommand.ExecuteScalar()); 
    sqlConnection.Close(); 
} 
+1

Вы считали [предложение OUTPUT] (http://msdn.microsoft.com/en-us/library/ms177564.aspx)? –

+0

Я так много изучил, что кажется, что Scope Identity() является самым сильным методом получения ID –

ответ

3

Вам необходимо иметь SCOPE_IDENTITY в рамках той же транзакции, что и ваша вставка. Следующее вам должно помочь.

string SQL = "INSERT INTO Customer (Customer_Name) VALUES (@customer_Name); SELECT Customer_Id FROM Customer WHERE Customer_Id = SCOPE_IDENTITY();"; 
SqlCommand sqlCommand = new SqlCommand(SQL, sqlConnection); 
sqlCommand.Parameters.Add("@customer_Name", SqlDbType.VarChar, 100).Value = customer_Name; 
sqlConnection.Open(); 
int id = (int) sqlCommand.ExecuteScalar(); 
+0

спасибо Джейсону, я знаю, что ID в строке, чтобы я мог двигаться дальше. это именно то, что я искал. –

-1

попробовать что-то вроде этого .. Выходного раздел поможет вам получить вставленное значение и что мы можем вставить в другой темп или физическую таблицу. Это всего лишь идея на ваш вопрос

CREATE TABLE customer 
    (
    id  INT IDENTITY(1, 1), 
    addres VARCHAR(500) 
) 

CREATE TABLE customeraddrs 
    (
    custid INT 
) 

INSERT INTO customer 
output  inserted.id 
INTO customeraddrs 
VALUES  ('a'), 
      ('b') 

SELECT * 
FROM customer 

SELECT * 
FROM customeraddrs 
+0

Pradeep, это именно то, что я говорил, что я нахожу. это не помогает, но спасибо за попытку –