有关 SqlDataReader.GetSchemaTable() 方法: 探讨问题????请给予你宝贵的意见
tenny 2003-10-15 09:46:54 功能:返回一个 DataTable,它描述 SqlDataReader 的列元数据。
方法:public virtual DataTable GetSchemaTable();
返回参数:一个描述列元数据的 DataTable。
备注:对于 GetSchemaTable 方法,将按以下顺序返回关于每个列的元数据:
问题:对于上诉的列的元数据值的问题?
请问:
1). ProviderType 参数的类型是Int32吗?它返回的数值1,2,3,4....分别代表什么数据类型?他与java 方法----resultMeta.getColumnType(i+1)从数据库取到的值是一样的吗?
2). NumericPrecision 参数如果 ProviderType 是数值数据类型,则它是列的最大精度。精度取决于列的定义。如果 ProviderType 不是数值数据类型,则它为空值。那些数据类型是数值数据类型,列的最大精度怎么得到?也是从数据库取得的吗?
3). NumericScale 如果 ProviderType 是 DBTYPE_DECIMAL 或 DBTYPE_NUMERIC,则为小数点右侧的位数。否则,它为空值。请问小数点右侧的位数,是指什么数的小数点位数?
下面是我的一个sample:
using System;
using System.Xml;
using System.Xml.XPath;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Text;
using System.IO;
using System.Data.SqlTypes;
using System.Security.Permissions;
class test1{
public static void Main()
{
string sql = "SELECT * FROM TestSql";
string constr = "Data Source=localhost;Initial Catalog=TestADO;uid=sa;pwd=;";
SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand(sql,con);
con.Open();
SqlParameter parm = new SqlParameter("@Name", DbType.String);
parm.DbType = DbType.String;
parm.Direction = ParameterDirection.Input;
parm.Value = "maowen";
cmd.Parameters.Add(parm);
SqlDataReader rdr;
rdr = cmd.ExecuteReader();
int results = 0;
do {
results++;
DataTable dt = rdr.GetSchemaTable();
foreach (DataRow schemaRow in dt.Rows) {
for (int i=0;i<dt.Columns.Count;i++)
if((i==3) || (i==4) || (i==7) || (i==14)){
Console.WriteLine(i + ": " + dt.Columns[i].ColumnName + " = " + schemaRow[dt.Columns[i]]);
}
Console.WriteLine();
}
} while(rdr.NextResult());
con.Close();
}
}
运行结果:
3: NumericPrecision = 255
4: NumericScale = 255
7: BaseServerName =
14: ProviderType = 3
3: NumericPrecision = 255
4: NumericScale = 255
7: BaseServerName =
14: ProviderType = 3
其数据库表的设计参数为:
TableName=TestSql
列名 数据类型 长度 是否为空
Name char 10 是
Photo char 110 是