Solution Use the DataRowCollection.Count property, the DataReader.HasRows property, or the DataReader.Read method.. The sample code creates and fills a DataTable and uses the Count pro
Trang 1[ Team LiB ]
Recipe 2.11 Testing for No Records
Problem
You need to determine whether any records were returned from a query that you just executed
Solution
Use the DataRowCollection.Count property, the DataReader.HasRows property, or the DataReader.Read( ) method
The sample code creates and fills a DataTable and uses the Count property of the
DataRowCollection to determine if the query used to create the table returned any rows Next, a DataReader is created and both the HasRows property and the Read( ) method are used to determine whether the query used to create the DataReader returned any rows The C# code is shown in Example 2-13
Example 2-13 File: NoRecordTestForm.cs
// Namespaces, variables, and constants
using System;
using System.Configuration;
using System.Text;
using System.Data;
using System.Data.SqlClient;
// Table name constants
private const String ORDERS_TABLE = "Orders";
//
StringBuilder result = new StringBuilder( );
// Fill the Orders DataTable
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Orders",
ConfigurationSettings.AppSettings["Sql_ConnectString"]);
DataTable orderTable = new DataTable(ORDERS_TABLE);
da.Fill(orderTable);
Trang 2// Test Orders DataTable for records
bool tableHasRecords = orderTable.Rows.Count > 0;
result.Append("DataTable " + ORDERS_TABLE + ": Has records = " +
tableHasRecords + Environment.NewLine);
// Create the Orders DataReader
SqlConnection conn = new SqlConnection(
ConfigurationSettings.AppSettings["Sql_ConnectString"]);
SqlCommand cmd = new SqlCommand("SELECT * FROM ORDERS", conn);
conn.Open( );
SqlDataReader orderReader = cmd.ExecuteReader( );
// Test Orders DataReader for records
result.Append("DataReader " + ORDERS_TABLE + ": Has records = " +
orderReader.HasRows + Environment.NewLine);
// Test Orders DataReader for records
bool readerHasRecords = orderReader.Read( );
result.Append("DataReader " + ORDERS_TABLE + ": Has records = " +
readerHasRecords + Environment.NewLine);
orderReader.Close( );
conn.Close( );
resultTextBox.Text = result.ToString( );
Discussion
The DataTable contains a DataRowCollection object that contains all DataRow objects in the table The DataRowCollection has a Count property that returns the number of rows
in the table The Count property for an empty table has a value of 0
The HasRows property of the DataReader returns a Boolean value indicating whether the DataReader has any records
Another way is to use the Read( ) method to advance the DataReader to the next record This returns a value of true if a record is available and false otherwise The first call to the Read( ) method will indicate whether any records were returned by the DataReader This was the only way to determine whether the DataReader contained any records prior
to the introduction of the HasRows property in NET Framework 1.1
[ Team LiB ]