获取访问列的最大字段大小

时间:2011-08-05 08:41:00

标签: c# ms-access oledb

大家好,Stack Overflowers。我在这里有点困境。我需要获得你可以输入字段的最大字符数,但是我没有成功,Google没有产生类似于我需要的任何字符

这是我的代码

            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。 提前感谢任何可能提出解决方案的人。

2 个答案:

答案 0 :(得分:2)

在调用OledbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey方法之前尝试设置DataAdapter的{​​{1}}以下属性...

答案 1 :(得分: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();
        }