1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Determining the Length of Columns in a SQL Server Table doc

4 459 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Determining the length of columns in a SQL Server table
Tác giả Team LiB
Thể loại Recipe
Định dạng
Số trang 4
Dung lượng 15,73 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

[ Team LiB ]Recipe 10.4 Determining the Length of Columns in a SQL Server Table Problem The FillSchema method of the DataAdapter returns the correct length in the MaxLength property f

Trang 1

[ Team LiB ]

Recipe 10.4 Determining the Length of Columns in a SQL Server Table

Problem

The FillSchema( ) method of the DataAdapter returns the correct length in the

MaxLength property for string columns in a SQL Server database, but it returns -1 for the length of all other fields You need to get the length of columns other than string type columns

Solution

Use the system stored procedure sp_help

The sample code executes a batch query to return all rows from both the Orders and Order Details tables in the Northwind sample database The extended stored procedure sp_help is used to get the length, precision, and scale of all columns in both tables

The C# code is shown in Example 10-4

Example 10-4 File: ColumnSchemaForm.cs

// Namespaces, variables, and constants

using System;

using System.Configuration;

using System.Collections;

using System.Text;

using System.Data;

using System.Data.SqlClient;

//

StringBuilder schemaInfo = new StringBuilder( );

// Create a batch query to retrieve order and details

String sqlText = "select OrderID, CustomerID, EmployeeID, OrderDate, " +

"RequiredDate, ShippedDate, ShipVia, Freight, ShipName, " +

" ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry " +

"FROM Orders;" +

"SELECT OrderID, ProductID, UnitPrice, Quantity, Discount " +

"FROM [Order Details];";

Trang 2

// Create the connection

SqlConnection conn = new SqlConnection(

ConfigurationSettings.AppSettings["Sql_ConnectString"]);

// Create DataAdapter

SqlDataAdapter da = new SqlDataAdapter(sqlText, conn);

// Add table mappings

da.TableMappings.Add("Table", "Orders");

da.TableMappings.Add("Table1", "Order Details");

// Create the DataSet

DataSet ds = new DataSet( );

// Fill the schema and data

da.FillSchema(ds, SchemaType.Mapped);

da.Fill(ds);

// Iterate over the table collection in the DataSet

foreach(DataTable dt in ds.Tables)

{

schemaInfo.Append("TABLE: " + dt.TableName + Environment.NewLine);

// Create the command to retrieve column information

cmd = new SqlCommand("sp_help", conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@objname", SqlDbType.NVarChar, 776);

cmd.Parameters[0].Value = dt.TableName;

conn.Open( );

// Create the DataReader from the command

SqlDataReader dr = cmd.ExecuteReader( );

// Get the second result set containing column information

dr.NextResult( );

Hashtable colInfo = new Hashtable( );

// Iterate over the second result to retrieve column information

while(dr.Read( ))

{

colInfo.Add(dr["Column_name"].ToString( ),

"Length = " + dr["Length"] +

"; Precision = " + dr["Prec"] +

"; Scale = " + dr["Scale"]);

}

Trang 3

dr.Close( );

conn.Close( );

// Iterate over the column collection in the table

foreach(DataColumn col in dt.Columns)

{

// Get column information

schemaInfo.Append("\tCOLUMN: " + col.ColumnName +

Environment.NewLine);

schemaInfo.Append("\tAllowDBNull: " + col.AllowDBNull +

Environment.NewLine);

schemaInfo.Append("\tAutoIncrement: " + col.AutoIncrement +

Environment.NewLine);

schemaInfo.Append("\tDataType: " + col.DataType +

Environment.NewLine);

schemaInfo.Append("\tMaxLength: " + col.MaxLength +

Environment.NewLine);

schemaInfo.Append("\tUnique: " + col.Unique +

Environment.NewLine);

schemaInfo.Append("\tOther: " + colInfo[col.ColumnName] +

Environment.NewLine);

schemaInfo.Append(Environment.NewLine);

}

schemaInfo.Append(Environment.NewLine);

}

resultTextBox.Text = schemaInfo.ToString( );

Discussion

The system stored procedure sp_help returns, in addition to the length of all fields, the precision and scale of columns as appropriate

The sp_help system stored procedure takes one optional parameter When this parameter

is the name of a table object, the result set returns data including the length, precision, and scale of each column in columns named Length, Prec, and Scale

The column length returned by the sp_help is in bytes, meaning that Unicode data types (nchar, nvarchar, and ntext) report double the value of the MaxLength property of the column object In the example, the ShipCountry column of the Orders table reports MaxLength = 15 (stores a string up to 15 characters long) and Length = 30 (requires 30 characters to store the 15 Unicode characters)

Trang 4

For both the Orders and Order Details tables, the solution adds column length, precision, and scale data for each row in the sp_help result set to a Hashtable keyed on the column name The code then iterates over the collection of columns in the table and displays the length, precision, and scale for each from the Hashtable Information from the

FillSchema( ) method of the DataAdapter is also included The data type and nullable properties are available using both sp_help and FillSchema( )

For more information about the sp_help system stored procedure, refer to Microsoft SQL Server Books Online

The GetSchemaTable( ) method of the DataReader also returns all column lengths The method returns a DataTable containing column metadata for a DataReader, where the ColumnSize column contains the lengths For more information about the

GetSchemaTable( ) method, see the discussion for Recipe 5.3

[ Team LiB ]

Ngày đăng: 24/12/2013, 05:15

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w