最近在做项目的时候遇到一个问题,需要将原有的数据取出后装进dataTable中,但在操作dataTable中发现又需要数据的主键信息,利于dataTable的PrimaryKey属性根本就拿不到主键值。最后通过查阅资料发现,当要把数据拿出来的时候需要设置拿出数据附带主键属性(不知道这么说跟时间原理是不是有偏差),具体步骤记录如下,以备后续参考:
using (SqlConnection conn = new SqlConnection(CAppCfg.cnStrs)) { conn.Open(); using (SqlCommand command = conn.CreateCommand()) { try { command.CommandText = sqlstrs; using (SqlDataAdapter adp = new SqlDataAdapter(command)) { adp.MissingSchemaAction = MissingSchemaAction.AddWithKey; adp.Fill(dt_upload); } } catch (Exception er) { throw new Exception(er.Message); } } }
这样再利用dataTable的PrimaryKey属性就能拿到此数据信息中的主键信息了。
查阅剩余功能:MissingSchemaAction
Add:在填充数据集的时候直接累加过来,没有指定主键关系(默认值)
AddWithKey:从数据源中我们可以得到哪一个键是主键,然后根据主键进行填充,不会出现主键重复的情况,一般选择这种方式,当然这种方式有主键的检查。对于非类型化数据集格外重要
Error:如果选择这个选项,当填充UnTyped DataSet的时候,由于UnTypedDataSet没有数据结构,此时会报错
抛出一个InvalidOperationException: Missing the 'Table' DataTable for the 'Table' SourceTable.
Ignore:忽略,也就是架构不存在的情况下,数据填充会被忽略掉。由于Untyped DataSet 没有架构,此时 就会忽略填充,