Data Operations That Do Not Return Rows

 

Priya Dhawan
Microsoft Developer Network

Revised February 2002

Summary: This article covers data operations that do not return rows using ADO .NET. (4 printed pages)

Download Bdadotnet_beta2.msi.

Contents

Introduction
Execute/Write
   Using the ADO .NET Command Object
Conclusion

Introduction

Many data operations do not return data other than an indication of success or failure and the number of rows affected. This article discusses how to use ADO .NET to execute these operations with SQL and ADO managed providers.

Execute/Write

Using the ADO .NET Command Object

The ADO .NET Command object provides the ExecuteNonQuery method for executing queries that do not return rows. Although it does not return rows, any output parameters or return values mapped to parameters of the Command object get populated with data.

The ExecuteNonQuery method returns the number of rows affected by Insert, Update, and Delete operations. For all other queries –1 is returned.

Error handling

When a query fails to execute—for example when an attempted action violates a database constraint—the managed provider throws an exception, which you can catch in your code.

The ADO .NET managed providers have a member class that handles exceptions. This exception class is created and thrown when an error is encountered.

With SQL expression as command text

In the following example, an SQL INSERT statement is executed using the ExecuteNonQuery method of the ADO .NET Command object. Structured error handling handles exceptions and closes the database connection regardless of the outcome:

Dim sqlConn As SQLConnection
Dim sqlCmd As SQLCommand
Dim rowsAffected As Integer
Try 
' Create a new connection object
sqlConn = New SQLConnection(myConnString)
' Create a new command object
sqlCmd = New SQLCommand()

   ' Specify the SQL expression and connection
   With sqlCmd
      .CommandType = CommandType.Text
      .CommandText = "Insert Customers (Alias, CustomerName) _
         Values ('myAlias','myName')"
      . Connection = sqlConn
      End With
   ' Open the connection
   sqlConn.Open()
   ' Execute the command. This returns rows affected.
   rowsAffected = sqlCmd.ExecuteNonQuery()
Catch e As Exception
   ' Handle the exception 
   …
Finally
' Close connection regardless of outcome
   sqlConn.Close()
End Try

Note   See Example 1 in the BDAdotNetData1.vb sample code (see top of article for download).

With the Parameters collection

The Parameters collection of the Command object is used to define the arguments of parameterized stored procedures or parameter queries. Although you can specify a stored procedure and Input parameters as command text, using the Parameters collection simplifies getting the parameters packed into the query in the right places and in the right format. String parameters containing quote characters, for example, are automatically formatted.

The following code builds a command that executes a stored procedure named InsertCustomer:

Dim sqlConn As SQLConnection
Dim sqlCmd As SQLCommand
Dim param As SQLParameter
Dim rowsAffected As Integer
Try
' Create a new connection object
sqlConn = New SQLConnection(myConnString)
' Create a new command object
sqlCmd = New SQLCommand()
   ' Specify the stored procedure and connection
   With sqlCmd
      .CommandType = CommandType.StoredProcedure
      .CommandText = "InsertCustomer"
      . Connection = sqlConn
   End With
   ' Define and add a parameter to the parameters collection
   param = sqlCmd.Parameters.Add(New _
   SQLParameter("@Alias", SQLDBType.NVarChar, 100))
   ' Set the parameter direction
   With param
      .Direction = ParameterDirection.Input
      ' Set the parameter value
      .Value = "myAliasEx2"
   End With
   ' Add remaining parameters
   …
   ' Open the connection
   sqlConn.Open()
   ' Execute the command
   rowsAffected = sqlCmd.ExecuteNonQuery()
Catch e As Exception
   ' Handle the exception 
   …
Finally
   ' Close connection regardless of outcome 
   sqlConn.Close()
End Try 

Note   See Example 2 in the BDAdotNetData1.vb sample code (see top of article for download).

Conclusion

ADO .NET facilitates data operations that do not return rows through the ExecuteNonQuery method of the Command object. When an indication of the number of rows affected is the only return data required this is the most efficient way to execute commands against the database.

Show: