SqlCommand.ExecuteScalar 方法

定义

执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行。

public:
 override System::Object ^ ExecuteScalar();
public:
 virtual System::Object ^ ExecuteScalar();
public override object ExecuteScalar ();
public object ExecuteScalar ();
override this.ExecuteScalar : unit -> obj
abstract member ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
Public Overrides Function ExecuteScalar () As Object
Public Function ExecuteScalar () As Object

返回

为结果集中的第一行的第一列,或者,如果结果集为空,则为 null 引用(在 Visual Basic 中为 Nothing)。 最多返回 2033 个字符。

实现

例外

Value 设置为 Stream 时,使用的是 SqlDbType 而不是 Binary 或 VarBinary。 有关流式处理的详细信息,请参阅 SqlClient 流支持

- 或 -

设置为 SqlDbTypeValueTextReader,使用了 CharNCharNVarCharVarCharXml 以外的 。

- 或 -

Value 设置为 XmlReader 时,使用的是 SqlDbType 而不是 Xml

对锁定的行执行命令时出现异常。 当使用 Microsoft .NET Framework 1.0 版时不生成此异常。

- 或 -

流式处理操作期间发生了超时。 有关流式处理的详细信息,请参阅 SqlClient 流支持

流式处理操作期间关闭或删除了 SqlConnection。 有关流式处理的详细信息,请参阅 SqlClient 流支持

流式处理操作期间在 StreamXmlReaderTextReader 对象中出现了错误。 有关流式处理的详细信息,请参阅 SqlClient 流支持

流式处理操作期间关闭了 StreamXmlReaderTextReader 对象。 有关流式处理的详细信息,请参阅 SqlClient 流支持

示例

以下示例创建 , SqlCommand 然后使用 执行它 ExecuteScalar。 该示例传递了一个字符串,该字符串表示要插入到表中的新值,以及一个用于连接到数据源的字符串。 如果插入了新行,函数将返回新的 Identity 列值,失败时返回 0。

static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}
Public Function AddProductCategory( _
  ByVal newName As String, ByVal connString As String) As Integer
    Dim newProdID As Int32 = 0
    Dim sql As String = _
     "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " _
       & "SELECT CAST(scope_identity() AS int);"

    Using conn As New SqlConnection(connString)
        Dim cmd As New SqlCommand(sql, conn)
        cmd.Parameters.Add("@Name", SqlDbType.VarChar)
        cmd.Parameters("@Name").Value = newName
        Try
            conn.Open()
            newProdID = Convert.ToInt32(cmd.ExecuteScalar())
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Using

    Return newProdID
End Function

注解

ExecuteScalar使用 方法检索单个值 (例如,从数据库中) 聚合值。 这需要的代码比使用 ExecuteReader 方法少,然后执行使用 返回 SqlDataReader的数据生成单个值所需的操作。

典型 ExecuteScalar 查询的格式可以如以下 C# 示例中所示:

cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();

适用于

另请参阅