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

C# 获取访问列的最大字段大小,c#,ms-access,oledb,C#,Ms Access,Oledb,嗨,大家好,堆叠飞越者。我在这里有点进退两难。我需要获得的字符,你可以进入一个领域的最大值,但我没有成功,谷歌没有产生任何类似于我需要的东西 这是我的密码 lvwDestination.Columns.Add("Fields in Database", 150, HorizontalAlignment.Left); lvwDestination.Columns.Add("DataType", 100, HorizontalAlignment.Le

嗨,大家好,堆叠飞越者。我在这里有点进退两难。我需要获得的字符,你可以进入一个领域的最大值,但我没有成功,谷歌没有产生任何类似于我需要的东西

这是我的密码

            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 });


            }
但是这个方法得到的唯一结果是每列1。我还确保我的列确实启用了属性字段大小属性。.ColumnName和.DataType工作正常,但.MaxLength始终生成-1。
提前感谢能够想出解决方案的任何人。

在调用
填充方法之前,请尝试设置以下属性:
OledbDataAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey
,然后尝试设置以下属性:调用
Fill
方法之前,
OledbDataAdapter.MissingSchemaAction=MissingSchemaAction.AddWithKey
,调用
Fill
方法…

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

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


可能的重复事实上不,不是重复,因为您可以看到问题是从XML填充的,我是从Access填充的,所以不,我的问题不是重复的。另外,这个问题并没有说明我的问题的解决方案。可能的重复事实上不是重复的,正如您所看到的,这个问题是从XML填充的,我是从Access填充的,所以不,我的问题不是重复的。另外,这个问题并没有说明我的问题的解决方案。谢谢你的回答,我现在会尝试一下,然后回来告诉你,不起作用的是,字段大小为40的列返回50,字段大小为30的列返回100,字段大小为16的列返回15,但谢谢你的帮助。我正在使用MaxLength,是否有什么地方我可能做错了。
MissingSchemaAction.AddWithKey
为我修复了相同的问题。谢谢。谢谢你的回答。我现在就试用一下,然后再回来给你。不起作用的是,字段大小为40的列返回50,字段大小为30的列返回100,字段大小为16的列返回15,但谢谢你的帮助。我正在使用MaxLength,是否有什么地方我可能做错了。
MissingSchemaAction.AddWithKey
为我修复了相同的问题。谢谢。换句话说,你的意思是说我绝对无法从Access中检索字段大小属性。我真的需要一个问题来回答这个问题,因为如果无法读取最大长度,我的整个程序将折叠,因为当有太多字符时,导入将失败。我不相信这是不可能的,因为我可以返回数据类型时没有任何问题。我已再次尝试使用OleDb提供程序,并按照@waqas的建议包括MissingSchemaAction设置。对于SQL Server数据库(我在此计算机上没有MS Access),MaxLength返回正确。这可能是一个访问特定的问题;提供程序似乎工作正常。嗯,谢谢,我也看到了,因为它返回的是错误的值,而不是字段大小。换句话说,你的意思是,我绝对无法从Access检索字段大小属性。我真的需要一个问题来回答这个问题,因为如果无法读取最大长度,我的整个程序就会折叠由于当字符太多时导入将失败,我无法相信这是不可能的,因为我可以毫无问题地返回数据类型。我已再次尝试使用OleDb提供程序,并按照@waqas的建议包括MissingSchemaAction设置。对于SQL Server数据库(我在此计算机上没有MS Access),MaxLength返回正确。这可能是一个访问特定的问题;提供程序似乎工作正常。嗯,谢谢,我也看到了,因为它返回的是错误的值,而不是字段大小