Tải bản đầy đủ (.pdf) (6 trang)

Tài liệu An Example of Using the Get* Methods phần 1 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (24.09 KB, 6 trang )

An Example of Using the Get* Methods
Let's take a look at an example that reads the ProductID, ProductName, UnitPrice,
UnitsInStock, and Discontinued columns from the Products table using the Get*
methods.
To figure out which Get* method to use to retrieve a particular SQL Server column type,
you use Table 9.4
, shown earlier. For example, the ProductID column is a SQL Server
int, and looking up that SQL Server type in Table 9.4
, you can see you use the GetInt32()
method to obtain the column value as a C# int. Table 9.5
summarizes the column names,
SQL Server types, Get* methods, and C# return types required to retrieve the five
columns from the Products table.
Table 9.5: Products TABLE COLUMNS, TYPES, AND METHODS
COLUMN
NAME
SQL SERVER COLUMN
TYPE
GET*
METHOD
C# RETURN
TYPE
ProductID int GetInt32() int
ProductName nvarchar GetString() string
UnitPrice money GetDecimal() decimal
UnitsInStock smallint GetInt16() short
Discontinued bit GetBoolean() bool
Let's assume that you already have a SqlDataReader object named
productsSqlDataReader and that it may be used to read the five columns from the
Products table. The following while loop uses the Get* methods and returned C# types
shown in Table 9.5


to obtain the column values from productsSqlDataReader:
while (productsSqlDataReader.Read())
{
int productID =
productsSqlDataReader.GetInt32(productIDColPos);
Console.WriteLine("productID = " + productID);

string productName =
productsSqlDataReader.GetString(productNameColPos);
Console.WriteLine("productName = " + productName);

decimal unitPrice =
productsSqlDataReader.GetDecimal(unitPriceColPos);
Console.WriteLine("unitPrice = " + unitPrice);

short unitsInStock =
productsSqlDataReader.GetInt16(unitsInStockColPos);
Console.WriteLine("unitsInStock = " + unitsInStock);

bool discontinued =
productsSqlDataReader.GetBoolean(discontinuedColPos);
Console.WriteLine("discontinued = " + discontinued);
}
As you can see, five variables of the appropriate type are created in this while loop, each
of which is used to store the result from the Get* method. For example, the productID
variable is used to store the ProductID column value, and since ProductID is of the SQL
Server int type, the appropriate C# type for the productID variable is int. To get the
ProductID column value as a C# int, you call the GetInt32() method. Similarly, the
productName variable is a C# string that is used to store the ProductName column value.
This column is of the nvarchar SQL Server type, and to get the Product-Name column

value, the GetString() method is used.
Of course, this code depends on your knowing the type of the database column. If you
don't know the type of a column, you can get it using Visual Studio .NET's Server
Explorer. For example, Figure 9.1
shows the details of the ProductID column of the
Products table. As you can see, ProductID is an int.

Figure 9.1: Obtaining the type of a column using Visual Studio .NET's Server Explorer
Before closing this section, I will show you how to get the .NET type and database type
of a column using C#. You get the .NET type used to represent a column using the
GetFieldType() method of your DataReader object. For example:
Console.WriteLine("ProductID .NET type = " +
productsSqlDataReader.GetFieldType(productIDColPos));
This example displays:
ProductID .NET type = System.Int32
As you can see, the System.Int32 .NET type is used to represent the ProductID column.
The System.Int32 .NET type corresponds to the C# int type. You can see this type
correspondence in Table 9.3
, shown earlier.
You can get the database type for a column using the GetDataTypeName() method of
your DataReader object. For example:
Console.WriteLine("ProductID database type = " +
productsSqlDataReader.GetDataTypeName(productIDColPos));
This example displays:
ProductID database type = int
As you can see, the ProductID column is of the SQL Server int type.
Listing 9.2
uses the code examples shown in this section.
Listing 9.2: STRONGLYTYPEDCOLUMNVALUES.CS


/*
StronglyTypedColumnValues.cs illustrates how to read
column values as C# types using the Get* methods
*/

using System;
using System.Data;
using System.Data.SqlClient;

class StronglyTypedColumnValues
{
public static void Main()
{
SqlConnection mySqlConnection =
new SqlConnection(
"server=localhost;database=Northwind;uid=sa;pwd=sa"
);

SqlCommand mySqlCommand = mySqlConnection.CreateCommand();

mySqlCommand.CommandText =
"SELECT TOP 5 ProductID, ProductName, UnitPrice, " +
"UnitsInStock, Discontinued " +
"FROM Products " +
"ORDER BY ProductID";

mySqlConnection.Open();

SqlDataReader productsSqlDataReader =
mySqlCommand.ExecuteReader();


int productIDColPos =
productsSqlDataReader.GetOrdinal("ProductID");
int productNameColPos =
productsSqlDataReader.GetOrdinal("ProductName");
int unitPriceColPos =
productsSqlDataReader.GetOrdinal("UnitPrice");
int unitsInStockColPos =
productsSqlDataReader.GetOrdinal("UnitsInStock");
int discontinuedColPos =
productsSqlDataReader.GetOrdinal("Discontinued");

// use the GetFieldType() method of the DataReader object
// to obtain the .NET type of a column
Console.WriteLine("ProductID .NET type = " +
productsSqlDataReader.GetFieldType(productIDColPos));
Console.WriteLine("ProductName .NET type = " +
productsSqlDataReader.GetFieldType(productNameColPos));
Console.WriteLine("UnitPrice .NET type = " +
productsSqlDataReader.GetFieldType(unitPriceColPos));
Console.WriteLine("UnitsInStock .NET type = " +
productsSqlDataReader.GetFieldType(unitsInStockColPos));
Console.WriteLine("Discontinued .NET type = " +
productsSqlDataReader.GetFieldType(discontinuedColPos));

// use the GetDataTypeName() method of the DataReader object
// to obtain the database type of a column
Console.WriteLine("ProductID database type = " +
productsSqlDataReader.GetDataTypeName(productIDColPos));
Console.WriteLine("ProductName database type = " +

productsSqlDataReader.GetDataTypeName(productNameColPos));
Console.WriteLine("UnitPrice database type = " +
productsSqlDataReader.GetDataTypeName(unitPriceColPos));
Console.WriteLine("UnitsInStock database type = " +
productsSqlDataReader.GetDataTypeName(unitsInStockColPos));
Console.WriteLine("Discontinued database type = " +
productsSqlDataReader.GetDataTypeName(discontinuedColPos));

// read the column values using Get* methods that
// return specific C# types
while (productsSqlDataReader.Read())
{
int productID =
productsSqlDataReader.GetInt32(productIDColPos);
Console.WriteLine("productID = " + productID);

string productName =
productsSqlDataReader.GetString(productNameColPos);
Console.WriteLine("productName = " + productName);

decimal unitPrice =
productsSqlDataReader.GetDecimal(unitPriceColPos);
Console.WriteLine("unitPrice = " + unitPrice);

short unitsInStock =
productsSqlDataReader.GetInt16(unitsInStockColPos);
Console.WriteLine("unitsInStock = " + unitsInStock);

bool discontinued =
productsSqlDataReader.GetBoolean(discontinuedColPos);

Console.WriteLine("discontinued = " + discontinued);
}

productsSqlDataReader.Close();
mySqlConnection.Close();
}
}

The output from this program is as follows:
ProductID .NET type = System.Int32
ProductName .NET type = System.String
UnitPrice .NET type = System.Decimal
UnitsInStock .NET type = System.Int16
Discontinued .NET type = System.Boolean

×