Сохранить значение в переменной после использования оператора select - PullRequest
3 голосов
/ 12 октября 2009

Как сохранить значение PolicyID, возвращенное из базы данных, в целочисленной переменной в C#?

Я использую SQL Server 2005.

        System.Data.SqlClient.SqlConnection dataConnection = new SqlConnection();
        dataConnection.ConnectionString =
            @"Data Source=JAGMIT-PC\SQLEXPRESS;Initial Catalog=SumooHAgentDB;Integrated Security=True";

        System.Data.SqlClient.SqlCommand dataCommand = new SqlCommand();
        dataCommand.Connection = dataConnection;
        dataCommand.CommandText = ("select PolicyID from Policies where PolicyID=(select max(PolicyID) from Policies)");



        dataConnection.Open();
        dataCommand.ExecuteNonQuery();
        dataConnection.Close();

Пожалуйста, предложите.

Спасибо.

Ответы [ 4 ]

6 голосов
/ 12 октября 2009

Используйте метод SqlCommand.ExecuteScalar , например:

command.CommandText = @"select max(PolicyID) from Policies";
int maxPolicyId = (int)command.ExecuteScalar();

Кроме того, если вы делаете это для вставки новой строки Политики с уникальным идентификатором, вы не должны делать это так, потому что вполне возможно, что между строкой выбора и вставкой будет вставлена ​​другая строка Политики.

Вместо этого используйте столбец IDENTITY или UNIQUEIDENTIFIER.

РЕДАКТИРОВАТЬ : Чтобы использовать это в своем коде, сделайте следующее:

int maxId;
using (SqlConnection dataConnection = new SqlConnection(@"Data Source=JAGMIT-PC\SQLEXPRESS;Initial Catalog=SumooHAgentDB;Integrated Security=True"))
using (SqlCommand dataCommand = 
        new SqlCommand("select max(PolicyID) from Policies", dataConnection)) {

    dataConnection.Open();
    maxId = Convert.ToInt32(dataCommand.ExecuteScalar());
}
2 голосов
/ 12 октября 2009
DECLARE @id INTEGER
SELECT @id=PolicyID FROM ...
1 голос
/ 12 октября 2009

Вы только что вставили новую запись в эту таблицу политик, и теперь вам нужен идентификатор? Тогда вместо max () используйте

SELECT SCOPY_IDENTITY()

чтобы получить значение, которое было присвоено вашей записи, а не записи, которая была вставлена ​​через несколько секунд.

0 голосов
/ 13 октября 2009

Вы также можете использовать SELECT IDENT_CURRENT('Policies'), чтобы получить значение, которое было создано для вашей записи. Чтобы узнать больше о различиях между SCOPE_IDENTITY() И IDENT_CURRENT('tablename'), посмотрите эту ссылку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...