【问题标题】:Obtaining the Maximum Field Size of an Access Column获取访问列的最大字段大小
【发布时间】:2011-08-05 08:40:59
【问题描述】:

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

【问题讨论】:

  • 实际上没有重复,因为您可以看到问题是从我从 Access 填充的 XML 中填充的,所以我的问题不是重复的。该问题也没有说明我的问题的解决方案。

标签: c# ms-access oledb


【解决方案1】:

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

【讨论】:

  • 谢谢你的回答,我现在试试,然后再回复你
  • 这不起作用,它为字段大小为 40 的列返回 50,在另一个字段大小为 30 的列上返回 100,在字段大小为 16 的列上返回 15但感谢您尝试提供帮助。我正在使用 MaxLength,我可能做错了什么。
  • MissingSchemaAction.AddWithKey 为我解决了同样的问题。谢谢。
【解决方案2】:

我对 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();
        }

【讨论】:

  • 所以换句话说,你的意思是说我绝对没有办法从访问中检索字段大小属性
  • 我真的需要一个问题来回答这个问题,因为无法读取最大长度我的整个程序折叠,因为当字符太多时导入将失败
  • 我不相信这是不可能的,因为我可以毫无问题地返回 DataType
  • 我再次尝试使用 OleDb 提供程序,并按照@waqas 的建议包括 MissingSchemaAction 设置。对于 SQL Server 数据库(我在这台机器上没有 MS-Access),正确返回 MaxLength。这可能是 Access 特定的问题;提供者似乎工作正常。
  • 嗯,谢谢,我也看到了,因为它返回的值是错误的,而不是字段大小
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
相关资源
最近更新 更多