call
DataAdapter.FillSchema(YourDataSet);then access DataColumn's MaxLength and AllowDBNull propertyYourDataSet.Tables[0].Columns["BH"].AllowDBNull
DataAdapter.FillSchema(YourDataSet);then access DataColumn's MaxLength and AllowDBNull propertyYourDataSet.Tables[0].Columns["BH"].AllowDBNull
maxlength读出的是-1,alldbnull读出的全部是true在java中是有一个专门的对象读这些值ResultSetMetaData不知到.net中有没有类似的
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("select * from authors", sConn);
da.FillSchema(ds, SchemaType.Source);
foreach (DataColumn c in ds.Tables[0].Columns)
Console.WriteLine("{0}: \ttype:{1},\tsize:{2},\tAllDBNull? {3}", c.ColumnName, c.DataType.Name, c.MaxLength, c.AllowDBNull);
output:
au_id: type:String, size:11, AllDBNull? False
au_lname: type:String, size:40, AllDBNull? False
au_fname: type:String, size:20, AllDBNull? False
phone: type:String, size:12, AllDBNull? False
address: type:String, size:40, AllDBNull? True
city: type:String, size:20, AllDBNull? True
state: type:String, size:2, AllDBNull? True
zip: type:String, size:5, AllDBNull? True
contract: type:Boolean, size:-1, AllDBNull? False
SqlCommand cmd = new SqlCommand();
DataTable schemaTable;
SqlDataReader myReader;
cn.ConnectionString = @"Data Source=(local);User ID=sa;Password=;Initial Catalog=Northwind";
cn.Open();cmd.Connection = cn;
cmd.CommandText = "SELECT * FROM Employees";
myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo);schemaTable = myReader.GetSchemaTable();foreach (DataRow myField in schemaTable.Rows)
{
Console.WriteLine("{0}; {1}, {2}", myField["COLUMNNAME"], myReader.GetDataTypeName( myReader.GetOrdinal(myField["COLUMNNAME"].ToString())),
myField["COLUMNSIZE"]);
}myReader.Close();
cn.Close();output:
EmployeeID; int, 4
LastName; nvarchar, 20
FirstName; nvarchar, 10
Title; nvarchar, 30
TitleOfCourtesy; nvarchar, 25
BirthDate; datetime, 8
HireDate; datetime, 8
Address; nvarchar, 60
City; nvarchar, 15
Region; nvarchar, 15
PostalCode; nvarchar, 10
Country; nvarchar, 15
HomePhone; nvarchar, 24
Extension; nvarchar, 4
Photo; image, 2147483647
Notes; ntext, 1073741823
ReportsTo; int, 4
PhotoPath; nvarchar, 255
By the way ,can it work out the value "ISNULL" in this way
LSYG text 2147483647 1
ZYDZ varchar 60 1
DZXX varchar 30 0
CZDH varchar 30 0
LXDH varchar 30 0
YZBM char 6 0
XXZGBM varchar 60 0
ZZJGDM varchar 9 1
XQR varchar 60 1
JXNY varchar 6 0
DZZFZR varchar 30 0
XXDZ varchar 60 0
XXYWMC varchar 180 1
XXMC varchar 60 0
XXDM varchar 12 0
XXQHM char 6 1
XXBBM char 1 1
XXLBM char 2 1
SZDLBM char 1 0
SZDJJSXM char 1 1
SZDMZSX char 1 1
GZGDXZ numeric 3 0
CZRXNL numeric 4 0
CZGDXZ numeric 3 0
XXRXNL numeric 3 0
XXGDXZ numeric 5 0
ZSQY char 30 1
FJXYYM char 3 1
ZJXYYM char 3 0
XXXZ varchar 60 1
BUT the real result isXXRefId varchar 32 False
LSYG text 2147483647 True
ZYDZ varchar 60 True
DZXX varchar 30 False
CZDH varchar 30 False
LXDH varchar 30 False
YZBM char 6 False
XXZGBM varchar 60 False
ZZJGDM varchar 9 True
XQR varchar 60 True
JXNY varchar 6 False
DZZFZR varchar 30 False
XXDZ varchar 60 False
XXYWMC varchar 180 True
XXMC varchar 60 False
XXDM varchar 12 False
XXQHM char 6 True
XXBBM char 1 True
XXLBM char 2 True
SZDLBM char 1 False
SZDJJSXM char 1 True
SZDMZSX char 1 True
GZGDXZ decimal 17 False
CZRXNL decimal 17 False
CZGDXZ decimal 17 False
XXRXNL decimal 17 False
XXGDXZ decimal 17 False
ZSQY char 30 True
FJXYYM char 3 True
ZJXYYM char 3 False
XXXZ varchar 60 True
{
foreach (DataColumn dc in schemaTable.Columns)
Console.WriteLine(dc.ColumnName + ":" + myField[dc]);
}
GZGDXZ decimal 1 the right value must be: 3
CZRXNL decimal 2 the right value must be: 4
CZGDXZ decimal 1 the right value must be: 3
XXRXNL decimal 1 the right value must be: 3
XXGDXZ decimal 3 the right value must be: 5
but
use myField["COLUMNSIZE"]
it always be 17
CZRXNL numeric 5 2 0
CZGDXZ numeric 5 1 0
XXRXNL numeric 5 1 0
XXGDXZ numeric 5 3 1
XZ numeric 9 10 0
Reading by .net
ColumnName DataType LengthGZGDXZ decimal 17
CZRXNL decimal 17
CZGDXZ decimal 17
XXRXNL decima 17
XXGDXZ decimal 17
XZ decimal 17
Reading by javaColumnName DataType LengthGZGDXZ numeric 3
CZRXNL numeric 4
CZGDXZ numeric 3
XXRXNL numeric 3
XXGDXZ numeric 5
XZ numeric 12