有关 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 是
...全文
79 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
colinfly 2003-10-15
1). ProviderType 参数的类型是Int32吗?它返回的数值1,2,3,4....分别代表什么数据类型?他与java 方法----resultMeta.getColumnType(i+1)从数据库取到的值是一样的吗?

如果是SqlDataReader 则是 SqlDataType Enum 类型
如果是OleDataReader 则是 OleDataType Enum 类型


2). NumericPrecision 参数如果 ProviderType 是数值数据类型,则它是列的最大精度。精度取决于列的定义。如果 ProviderType 不是数值数据类型,则它为空值。那些数据类型是数值数据类型,列的最大精度怎么得到?也是从数据库取得的吗?

indicates the maximum number of base 10 digits that it can store.
也就是数据能表示的最大数字的十进制的位数。

3). NumericScale 如果 ProviderType 是 DBTYPE_DECIMAL 或 DBTYPE_NUMERIC,则为小数点右侧的位数。否则,它为空值。请问小数点右侧的位数,是指什么数的小数点位数?

DBTYPE_DECIMAL or DBTYPE_NUMERIC。也就是定点小数。

回复
tenny 2003-10-15
老兄,我想问的就是他是如何处理的?
回复
LevinForum 2003-10-15
晕。MSDN上不是写得清清楚楚的么?
回复
发帖
.NET Framework
创建于2007-09-28

1.7w+

社区成员

.NET技术 .NET Framework
申请成为版主
帖子事件
创建了帖子
2003-10-15 09:46
社区公告
暂无公告