日期:2014-05-20  浏览次数:20404 次

如何获取一个表结构
用C#如何获取一个表结构,并放到dataset中
如:
列名     字段类型               长度
c1         varchar                 50
c2           int                       4
c3           datetime             8

…………………………


------解决方案--------------------
直接根据格式新建一个 DataTable,然后放到一个 DataSet 不是很好吗?
如果已有一个 DataTable,使用 DataTable.Clone() 可以复制结构,不包括数据。
------解决方案--------------------
sp_help tablename
------解决方案--------------------
执行sp_help tablename 之后会返回一个dataset
其中第二个datatable就是你想要的,但是要注意length,比如nvchare类型,表里的长度为50,在这个datatable里面会显示100
------解决方案--------------------
jxzhang615(冰河) 正解

------解决方案--------------------
不错的方法,受教了
------解决方案--------------------
1.如果这个表(假如名是dt)已经存在,就用DataTable dt1=dt.Clone()

2.如果不存在:
DataTable dt1=new DataTable();
dt1.Columns.Add( "c1 ",typeof(string));
dt1.Columns.Add( "c2 ",typeof(int));
dt1.Columns.Add( "c3 ",typeof(DateTime));

DataSet.Tables.Add(dt1)
------解决方案--------------------
string myConnString = "Provider=SQLOLEDB;Data Source=server;Initial Catalog=Duwamish7;Integrated Security=SSPI;Connect Timeout=30 ";

OleDbConnectionconn = new OleDbConnection(myConnString);
DataSetds = new DataSet();
using (conn)
{
conn.Open();
//取表
DataTable dataTalbeschema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[]{ null, null, null, "TABLE " } );
//取表结构
foreach (DataRow tableRow in dataTalbeschema.Rows)
{
String tableName = tableRow[ "Table_Name "].ToString();
string sql = "select * from " + tableName ;
OleDbDataAdapter oda= new OleDbDataAdapter(sql,conn);
oda.MissingSchemaAction = MissingSchemaAction.AddWithKey;
oda.FillSchema(ds,SchemaType.Mapped,tableName);
}
//添加Relation
DataTable dtfk = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Foreign_Keys,null );
foreach (DataRow fkRow in dtfk.Rows)
{
String fkName = fkRow[ "Fk_Name "].ToString();
DataColumn parentColumn = ds.Tables[fkRow[ "Pk_Table_Name "].ToString()].Columns[fkRow[ "Pk_Column_Name "].ToString()];
DataColumn childColumn = ds.Tables[fkRow[ "Fk_Table_Name "].ToString()].Columns[fkRow[ "Fk_Column_Name "].ToString()];
ds.Relations.Add(fkName,parentColumn,childColumn);
}
conn.Close();
}

------解决方案--------------------
SELECT
表名 = case when a.colorder=1 then d.name else ' ' end,
表说明 = case when a.colorder=1 then isnull(f.value, ' ') else ' ' end,
字段名 = a.name,
主键 = case when exists(SELECT 1 FROM sysobjects where xtype= 'PK ' and parent_obj=a.id and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√ ' else ' ' end,
类型 = b.name,