普通的ADO.NET获取DataSet的写法如下:
using System.Configuration;using System.Data;using System.Data.SqlClient;public class SQLHelper{ ???private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString; ???public static DataSet GetDataSet(string sql) ???{ ???????using (SqlConnection conn =new SqlConnection(ConnectionString)) ???????{ ???????????SqlCommand cmd = new SqlCommand(sql, conn); ???????????SqlDataAdapter adapter = new SqlDataAdapter(cmd); ???????????DataSet ds = new DataSet(); ???????????conn.Open(); ???????????adapter.Fill(ds); ???????????return ds; ???????} ???}}
<?xml version="1.0" encoding="utf-8" ?><configuration> ?<connectionStrings> ???<add name="Default" connectionString="Data Source=.;Initial Catalog=EFDb;Integrated Security=true"/> ?</connectionStrings></configuration>
这里需要获取DataTable的主键信息,调试时发现没有主键信息,而实际数据库中是有主键(Id)
此时需要给SqlDataAdapter设置属性MissingSchemaAction为System.Data.MissingSchemaAction.AddWithKey
修改后的SQLHelper为
using System.Configuration;using System.Data;using System.Data.SqlClient;public class SQLHelper{ ???private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString; ???public static DataSet GetDataSet(string sql) ???{ ???????using (SqlConnection conn =new SqlConnection(ConnectionString)) ???????{ ???????????SqlCommand cmd = new SqlCommand(sql, conn); ???????????SqlDataAdapter adapter = new SqlDataAdapter(cmd); ???????????adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; ???????????DataSet ds = new DataSet(); ???????????conn.Open(); ???????????adapter.Fill(ds); ???????????return ds; ???????} ???}}
ADO.NET获取数据数据(DataSet)同时获取表的架构
原文地址:http://www.cnblogs.com/godbell/p/8051418.html