日期:2014-05-18  浏览次数:21211 次

C# 获取数据库表列名问题
我的数据库是SQLServer、现在假设我有个表A,表中有多个列,其中一列有个字段B,我怎么样才能获取到B的列名 ? 
表A:
第一列 第二列
  B C

最好附上代码。

------解决方案--------------------
SQL code

select c.name from sysobjects o,syscolumns c
where o.id =c.id and o.name='A'

------解决方案--------------------
这样的设计不是很好,不过真要做的话,
select 所有列 from 表A where 第1列=你要判断的内容 or 第2列=你要判断的内容 ... or 第n列=你要判断的内容
查询时用 SqlDataAdapter 填充到 DataTable ,然后循环判断 DataTable 第一行的所有列的值,哪个值等于你要判断的内容,就取那列的 ColumnName。
------解决方案--------------------
假设表名 TableA ,有列 C1, C2, C3 ,要查询的内容为 abc ,这三列的类型都是 VarChar 最好,不然就得类型转换,sql 语句:
SQL code
select C1, C2, C3 from TableA where C1='abc' or C2='abc' or C3='abc'

------解决方案--------------------
虽然这种方法很不好,但还是贴一下代码吧
string Data = "XXX"; 
string ColumnName=string.Empty;

foreach (DataRow dr in Dt.Rows)
{
foreach (System.Data.DataColumn Dc in Dt.Columns)
{
if (dr[Dc].ToString().Equals(Data))
{
ColumnName = Dc.ColumnName;
break;
}
}
if (ColumnName != string.Empty)
break;
 
}

Response.Write(ColumnName);

------解决方案--------------------
C# code
SqlConnection conn = 创建一个连接;
SqlDataAdapter ada = new SqlDataAdapter(查询语句, conn);
DataTable dtbl = new DataTable();
ada.Fill(dtbl);
foreach (DataColumn item in dtbl.Columns)
{
  if(dtbl.Rows[0][item] == "abc")
  {
  你要的列名就是 item.ColumnName
  }
}

------解决方案--------------------
补充一下,要注dr[Dc]是否为空

dr[Dc]==DBNull.Value || dr[Dc]==null

或者tostring的时候会报错