SqlCommand.ExecuteScalar 方法

定義

執行查詢,並回傳查詢回傳結果集第一列的第一欄。 額外的欄位或列則被忽略。

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

傳回

結果集第一列的第一欄,或若結果集為空,則為空參考(Nothing in Visual Basic)。 最多回傳2033個字元。

實作

例外狀況

當 設定為 SqlDbType時,會使用除 BinaryVarBinary 以外的 。ValueStream 欲了解更多串流資訊,請參閱 SqlClient 串流支援

-或-

SqlDbType除了 Char、NChar、NVarChar、VarCharXml,當 設定為 時,會使用其他 CharValue、NVarChar、TextReader 或 Xml。

-或-

當 設定為 SqlDbType時,會使用 Xml 以外的 。ValueXmlReader

在執行指令時發生了例外,該指令在鎖定列時發生。 當你使用 Microsoft .NET Framework 1.0 版本時,此例外不會產生。

-或-

串流操作中發生了一次超時。 欲了解更多串流資訊,請參閱 SqlClient 串流支援

SqlConnection 串流操作中關閉或掉落。 欲了解更多串流資訊,請參閱 SqlClient 串流支援

在串流操作中,物件或 發生StreamXmlReaderTextReader錯誤。 欲了解更多串流資訊,請參閱 SqlClient 串流支援

Stream該 , XmlReaderTextReader物件在串流操作中被關閉。 欲了解更多串流資訊,請參閱 SqlClient 串流支援

範例

以下範例建立 a 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();

適用於

另請參閱