And*_*eev 3 .net c# sql-server ado.net
我做以下事情:
SqlConnection conn = new SqlConnection("... my connection string ...");
dataAdapter = new SqlDataAdapter();
SqlCommand selectCommand = new SqlCommand("select * from items", conn);
dataAdapter.SelectCommand = selectCommand;
DataTable schemaTable = new DataTable();
dataAdapter.FillSchema(schemaTable, SchemaType.Source);
Run Code Online (Sandbox Code Playgroud)
但是,schemaTable中没有行.dataAdapter.Fill()工作.
我想你误解了什么FillSchema.
它传入DataTable(没有行和没有列)并构建模式,添加有关大小,类型等的信息的列...对应于将返回的表SelectCommand.
它没有用记录填充传入的表.
事实上,如果您在调用之后查看"列数",FillSchema则会发现您schemaTable已使用与表匹配的列"构建" items.
那么,考虑到Fill调用,FillSchema调用的用途是什么,同样用表的列名称和类型填充表格?好吧,FillSchema用于准备传入以下内容的表,Fill其中一些属性不会被Fill调用加载.例如,假设您的items表有一AutoIncrement列.调用Fill后,此属性在匹配的DataColumn上不可用.但是,如果您传递给Fill,FillSchema准备的表,该属性可用.
如果您只想要关于表格列的信息,则需要采用不同的方法
using(SqlConnection con = new SqlConnection(.......)
{
con.Open();
DataTable schema = con.GetSchema("Columns", new string[] {null, null, "items"});
foreach(DataRow row in schema.Rows)
Console.WriteLine("TABLE:" + row.Field<string>("TABLE_NAME") +
" COLUMN:" + row.Field<string>("COLUMN_NAME"));
}
Run Code Online (Sandbox Code Playgroud)
或者以更标准的方式
using(SqlConnection con = new SqlConnection(.......)
{
con.Open();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(@"SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='items'
AND TABLE_CATALOG = 'yourDBNameHere'", con);
SqlDataReader reader = cmd.ExecuteReader();
dt.Load(reader);
foreach(DataRow row in dt.Rows)
..... catalog, name, ordinal_position, column_default etc....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5689 次 |
| 最近记录: |