c# – SqlDataAdapter.FillSchema()方法不起作用
发布时间:2020-12-16 02:04:14 所属栏目:百科 来源:网络整理
导读:我做以下事情: SqlConnection conn = new SqlConnection("... my connection string ...");dataAdapter = new SqlDataAdapter();SqlCommand selectCommand = new SqlCommand("select * from items",conn);dataAdapter.SelectCommand = selectCommand;DataTa
我做以下事情:
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); 但是,schemaTable中没有行. dataAdapter.Fill()工作. 解决方法
我想你误解了FillSchema的作用.
它传入DataTable(没有行和没有列)并构建模式,添加有关大小,类型等的信息的列…对应于SelectCommand将返回的表. 事实上,如果在调用FillSchema之后查看Columns计数,您会发现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")); } 或者以更标准的方式 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.... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |