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

use*_*084 3 c# sql-server asp.net 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();
Run Code Online (Sandbox Code Playgroud)

请建议.

谢谢.

SLa*_*aks 6

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

command.CommandText = @"select max(PolicyID) from Policies";
int maxPolicyId = (int)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

此外,如果您这样做是为了插入具有唯一ID的新Policy行,则不能这样做,因为完全可能在select和insert之间插入不同的Policies行.

而是使用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());
}
Run Code Online (Sandbox Code Playgroud)