近日写一数据库转换程序,需要读取sqlserver中varchar字段的长度。
结果datacolumn的maxlength属性一直是-1。上网找了找,基本上大叫都处于郁闷不解状态,
后查询msdn网站的一篇文章:
http://support.microsoft.com/kb/314145/zh-cn
见第8条:
SqlDataAdapter 类提供 Fill 和 FillSchema 两种方法,这对于加载这些数据很关键。这两种方法均可将信息加载到 DataSet 中。Fill 加载数据本身,而 FillSchema 加载有关特定表的所有可用的元数据(如列名、主键和约束)。处理数据加载的正确方式是先运行 FillSchema,后运行 Fill。例如:
daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors"); daAuthors.Fill(dsPubs,"Authors");
如果您只使用 Fill,则只能加载描述列名和数据类型所需要的基本元数据。Fill 方法不加载主键信息。
若要更改此默认行为,可以将 DataAdapter 对象的 MissingSchemaAction 属性
设置为 MissingSchemaAction.AddWithKey,该属性会将主键元数据与默认信息一起加载。例如:
daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey; daAuthors.Fill(dsPubs,"Authors");