使用select语句后将值存储在变量中

时间:2009-10-12 15:46:34

标签: c# asp.net sql-server visual-studio

如何在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 个答案:

答案 0 :(得分:6)

使用SqlCommand.ExecuteScalar方法,如下所示:

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

另外,如果你这样做是为了插入一个带有唯一ID的新Policy行,你不能这样做,因为完全有可能在select和insert之间插入一个不同的Policies行。 / p>

而是使用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());
}

答案 1 :(得分:2)

DECLARE @id INTEGER
SELECT @id=PolicyID FROM ...

答案 2 :(得分:1)

您是否只是在该政策表中插入新记录,现在您想要提供ID吗? 然后使用

而不是max()
SELECT SCOPY_IDENTITY()

获取分配给您的记录的值,而不是稍后插入的记录。

答案 3 :(得分:0)

您还可以使用SELECT IDENT_CURRENT('Policies')获取为记录创建的值。要详细了解SCOPE_IDENTITY()IDENT_CURRENT('tablename')之间的差异,请查看此link