Получение максимального размера поля столбца доступа - PullRequest
0 голосов
/ 05 августа 2011

Привет всем вам Переполнение стека. У меня здесь есть небольшая дилемма. Мне нужно получить максимальное количество символов, которое вы можете ввести в поле, но я не добился успеха, и 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 ]

2 голосов
/ 05 августа 2011

попробуйте установить следующее свойство: OledbDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey вашего DataAdapter перед вызовом метода Fill ...

1 голос
/ 05 августа 2011

Я провел быстрый тест для таблицы базы данных 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();
        }

...