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 時,使用 BinaryVarBinary 以外的 SqlDbType。 如需串流的詳細資訊,請參閱 SqlClient 串流支援

-或-

SqlDbType當 設定TextReader為 時Value,會使用 CharNCharNVarCharVarCharXml 以外的 。

-或-

Value 設定為 XmlReader 時,使用 Xml 以外的 SqlDbType

對鎖定的資料列執行命令時發生例外狀況。 當您使用 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();

適用於

另請參閱