Динамическая привязка базы данных в C # - PullRequest
3 голосов
/ 03 октября 2008

У меня есть проект, который подключается к производственной базе данных и получает таблицы и представления. Унаследованный код соединяется с базой данных SQL Server через SqlConnection с предоставленными пользователем учетными данными и указанным местоположением базы данных. Когда требуются данные, он использует соединение и строку SQL для создания SqlDataAdapter и заполняет новый DataSet. Затем эти данные отображаются после манипулирования ими, замены имен столбцов таблицы соответствующими отображаемыми именами, и тому подобное.

Проблема в том, что весь процесс медленный, и проблема заключается в том, что он отображает большие объемы данных в ListViews, которые не очень удобны для получения десяти тысяч строк данных. По причинам дизайна мы не собираемся разбивать страницы - здесь есть элемент управления поиском - и я могу с огромными усилиями реализовать виртуальный ListView, чтобы просто вернуться туда, где я был. Я просто думаю, что это неправильное приложение для ListViews - я подключаюсь к базе данных и отображаю записи. Похоже, работа для DataGridView.

К сожалению, просто не будет работать . Я пытаюсь привязать DataGridView к DataSet, который я получил из кода соединения через DataBinder, но когда я запускаю его, чтобы посмотреть, как данные сидят в DataSet, тогда как DataGridView совершенно пуст.

Однако, если я использую привязку графического интерфейса пользователя в своей тестовой базе данных, принимая текущую схему базы данных и мои учетные данные, - вот и все. Но я не могу использовать этот материал, потому что он просто недостаточно гибок - я не хочу определять схему в коде, которую я должен менять каждый раз, когда мы обновляем базу данных, и мне нужен доступ к строке подключения, и Кажется, я не получаю это от TableAdapter, который он создает.

Я что-то упустил, чтобы заставить работать мое решение DataSet / BindingSource? Я лаю не на том дереве?

Стоит ли в любом случае возиться с переплетом? Кажется, что все связывающие вещи, которые я вижу, помогают мне на 90% пути, но тогда я не могу изменить строку подключения или отсортировать определенные столбцы так, как я хочу, и мне кажется, что я хочу дать ей определенную схему который сломается, как только изменится база данных - тогда как рукописный код, по крайней мере, защищен и достаточно гибок. Я не сокращаю возможности, и медленное решение уже работает - если мне придется отказаться от некоторых моих требований, чтобы заставить его работать, мы просто разберемся с тем, что у нас есть.

Ответы [ 3 ]

1 голос
/ 03 октября 2008

Это должно работать нормально, если вы указали имя таблицы (иначе IIRC используется первая таблица). Конечно, вы можете упростить ситуацию, предоставив DGV соответствующий DataTable (а не DataSet). Вы также можете проверить, включена ли автоматическая генерация столбцов на DGV. Но привязка к специальной DataTable работает нормально; Я использую это все время для примеров и т. Д.

1 голос
/ 03 октября 2008

Я не уверен, что вы вообще не можете изменить Запрос или просто в контексте ситуации, о которой вы упоминали в конце своего поста.

Но я бы предложил реализовать какую-то подкачку страниц, если вы можете, и только получать строки конкретной страницы, на которой находится пользователь данных. Это имело бы ОГРОМНОЕ различие в производительности, особенно если набор результатов такой большой, как вы говорите. Это, вероятно, будет самым большим изменением производительности, которое вы могли бы сделать, по моему мнению. И вы можете сохранить текущую рабочую реализацию списка. Кроме того, даже если у вас есть таблица с заполненным запросом, вам все равно понадобится какая-то стратегия подкачки, или она тоже будет медленной.

Я только что взял случайную статью о реализации, но вы можете найти много других

РЕДАКТИРОВАТЬ: Что касается вашего обновленного Вопроса, весь смысл моего ответа был, если он не сломался, не исправить это. Если просмотр списка работает прямо сейчас, зачем его менять?

0 голосов
/ 03 октября 2008

откройте ваш набор данных в конструкторе, нажмите на адаптер и измените подключение на общедоступное (по умолчанию это внутреннее), после чего вы сможете получить к нему доступ

Что касается остальной части ваших проблем, покажите нам codez - привязка данных на сетке данных отлично работает AFAIK ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...