2013-06-20 46 views
3

我是一个新手,我试图从我的数据库中的某个表中检索列NAme,Size(max legth)和DataType,下面的代码当我执行它期望它显示所有列类型和名称(我didn没有找到如何引用大小,我使用ColumnSize,但据说DataColumn不包含此方法的定义)但当执行它时,它只显示:IsColumnSetSystem.Boolean 这是代码:我们如何从getschemaTable获取列大小和数据类型?

private void button1_Click(object sender, EventArgs e) 
    { 
     string EF = textBox1.Text; 

     try{ 
      //SqlDataAdapter adapter = SetupDataAdapter("SELECT * FROM id_declarant"); 
    SqlCommand comm = new SqlCommand(); 
    string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=declaration;Integrated Security=True"; 
     comm.Connection=new SqlConnection(connectionString); 
      String sql = @"SELECT * 
        FROM id_declarant,declarant 
       WHERE (declarant.Nom_pren_RS='" + EF + "') and (id_declarant.mat_fisc=declarant.mat_fisc) "; 
    comm.CommandText = sql; 
    comm.Connection.Open(); 
      SqlDataReader reader = comm.ExecuteReader(); 
      DataTable schemaTable = reader.GetSchemaTable(); 
      foreach (DataRow row in schemaTable.Rows) 
      { 
       foreach (DataColumn column in schemaTable.Columns) 
       { 
        System.IO.File.WriteAllText(@"C:\Users\Manuela\Documents\GL4\WriteLines.txt", column.ColumnName + column.DataType); 

       } 
      } 
+0

您是否在msdn上选中了此项? http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getschematable(v=vs.100).aspx – Ric

+0

是的,我有,事实上我使用ColumnName和DataTable,但它不显示正确的数据 – manu

回答

1

要打印的数据表通过的GetSchemaTable返回的列的名称,而不是它的价值,我也建议使用StringBuilder和写的一切,当你从循环退出

StringBuilder sb = new StringBuilder(); 
    foreach (DataRow row in schemaTable.Rows) 
    { 
     foreach (DataColumn column in schemaTable.Columns) 
     { 
      sb.AppendLine(column.ColumnName + ":" +row[column.ColumnName].ToString()); 
     } 
     sb.AppendLine(); 
    } 
    File.WriteAllText(@"C:\Users\Manuela\Documents\GL4\WriteLines.txt", sb.ToString()); 
9

也许我是有点过这个人,但得到的列的名称,大小和数据类型,你可以试试这个:

DataTable schemaTable = reader.GetSchemaTable(); 
foreach (DataRow row in schemaTable.Rows) 
{ 
    var name = row["ColumnName"]; 
    var size = row["ColumnSize"]; 
    var dataType = row["DataTypeName"]; 
    //append these to a string or StringBuilder for writing out later... 
} 

但也许这是不是你以后在做什么?

+0

感谢您的回答,它有一点帮助 – manu

+0

无后顾之忧。 @史蒂夫的答案比我的强多了:) – Ric

相关问题