2011-08-05 44 views
0

您好所有堆栈溢出。我在这里遇到了一些困难。我需要获得你可以进入一个领域最大字符,但我已经没有成功,谷歌并没有产生类似anyhing我所需要的获取访问列的最大字段大小

这里是我的代码

  lvwDestination.Columns.Add("Fields in Database", 150, HorizontalAlignment.Left); 

      lvwDestination.Columns.Add("DataType", 100, HorizontalAlignment.Left); 

      lvwDestination.Columns.Add("Max", 100, HorizontalAlignment.Left); 

      for (int i = 0; i < DataTable.Columns.Count; i++) 
      { 

       _lvwItem = new ListViewItem(DataTable.Columns[i].ColumnName, 0); 

       _lvwItem.Name = DataTable.Columns[i].ColumnName; 

       _lvwItem.SubItems.Add(DataTable.Columns[i].DataType.Name.ToString()); 

       _lvwItem.SubItems.Add(DataTable.Columns[i].MaxLength.ToString()); 
       lvwDestination.Items.AddRange(new ListViewItem[] { _lvwItem }); 


      } 

现在,你可以看我已经尝试过

_lvwItem.SubItems.Add(DataTable.Columns[i].MaxLength.ToString()); 

但是这个想出来的唯一的东西是每列-1。我也确保我的列确实具有属性字段大小属性。 .ColumnName和.DataType完美地工作,但.MaxLength总是产生-1。 预先感谢任何可能提出解决方案的人。

+0

可能重复http://stackoverflow.com/q/958101/754438 – Reniuz

+0

其实也没什么不DUP licate,因为你可以看到这个问题从XML填充我从Access中填充,所以没有我的问题不是重复的。此外,这个问题并没有解决我的问题。 – raz0r

回答

2

尝试设置以下属性:您DataAdapterOledbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey调用Fill方法之前...

+0

谢谢你的回答我会试试看现在回来给你 – raz0r

+0

这是行不通的,它返回50的字段大小为40列,在另一个返回100字段的字段大小为30和15列的字段大小为16,但感谢您试图提供帮助。我正在使用MaxLength是否有我可能做错的事情。 – raz0r

+0

'MissingSchemaAction.AddWithKey'为我解决了这个问题。谢谢。 –

1

我已经运行对SQL数据库表进行快速测试 - 它看起来像MaxLength属性不会从检索数据库并且一直将其值设置为-1,除非用户专门设置:

 string sql = "select top 10 * from [TestTable]"; 
     string connStr = ConfigurationManager.ConnectionStrings["DbConnString"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(connStr)) 
     { 
      SqlCommand cmd = new SqlCommand(sql, conn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable data = new DataTable(); 
      da.Fill(data); 

      foreach (DataColumn col in data.Columns) 
      { 
       Console.WriteLine(
        string.Format("{0}\t{1}\t{2}", 
          col.ColumnName, 
          col.DataType.ToString(), 
          col.MaxLength 
         ) 
        ); 
      } 
      Console.ReadLine(); 
     } 

+0

换句话说,你的意思是说我绝对没有办法从访问中检索字段大小属性 – raz0r

+0

我真的需要对这个答案提出问题,因为如果不能读取最大长度,我的整个程序就会折叠,因为导入会失败当字符太多时 – raz0r

+0

我不相信这是不可能的,因为我可以毫无问题地返回数据类型 – raz0r