Строка подключения в usercontrol не работает

#c# #sql #winforms #user-controls #connection-string

#c# #sql #winforms #пользовательские элементы управления #строка подключения

Вопрос:

Я пытался (учился) создать UserControl в Winforms.Вот мое приложение.config

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="LoginTestDB_cf"
      connectionString="Data Source=.SqlExpress;Initial Catalog=LoginTestDB;Integrated Security=True;Pooling=False"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>
  

Я создал статический класс и попытался получить строку подключения. Вот как я пытался:

 static class Helper
{
    public static string ConnectionString
    {
        get
        {
            string str = System.Configuration.ConfigurationManager.ConnectionStrings["LoginTestDB_cf"].ConnectionString;
            return str;
        }
    }
}
  

Затем я попытался получить доступ к строке подключения следующим образом:

 _myCommand = "my_command_text";
SqlConnection con = new SqlConnection();
con.ConnectionString = Helper.ConnectionString; //getting error
_cmd = new SqlCommand(_myCommand, con);
con.Open();
  

Ошибка: «Ссылка на объект не установлена на экземпляр объекта».

Я получаю ошибку при настройке строки подключения. Могу я узнать, что здесь не так? Я уверен, что есть небольшая ошибка или незнание, играющее грязную роль, но не способное распознать это.

Во вспомогательном классе я даже пытался с

 string str = System.Configuration.ConfigurationManager.AppSettings["LoginTestDB_cf"].ToString();
  

Но все еще безуспешно.

Спасибо.

Комментарии:

1. вы пробовали устанавливать точку останова в свойстве ConnectionString вспомогательного класса и проверять свойство ConnectionStrings менеджера конфигурации?

2. Ваш код кажется правильным, изначально я думал, что вы могли неправильно написать имя подключения…

3. строка str = System. Конфигурация. ConfigurationManager. Строки подключения[«LoginTestDB_cf»]. ConnectionString; // выдает ошибку в этом коде…

4. это из-за того, что я делаю это в Usercontrol??

5. Сколько у вас проектов и где эти файлы? app.config должен находиться в проекте, который генерирует exe, а не в библиотеке классов, которая генерирует dll.

Ответ №1:

Хорошо, итак, я придумал решение и отчаянно надеюсь, что кто-нибудь докажет, что я неправ. Я скопировал те же файлы (добавил существующие элементы) в другое решение Winforms (windowsFormApplication). И volla!! все работало нормально. Итак, на данный момент я думаю, что строки подключения нельзя использовать в UserControl, хотя я не могу обосновать то, что я говорю. Но да, я использовал те же файлы проекта и то же содержимое app.config (конечно, я изменил имя пространства имен для файлов), и все работало отлично. Пожалуйста, дайте мне знать, если я неправильно понимаю основы. конечно, я продолжу искать в Интернете эту проблему. Спасибо.

Надеюсь, это поможет.

Ответ №2:

Вы можете легко использовать строку подключения во вновь созданном элементе управления.

Вот моя настройка:

введите описание изображения здесь

Пользовательский элемент управления — это единственная кнопка с прикрепленным кодом, который вы предоставили. Вспомогательный класс является частью пользовательского элемента управления. Как вы можете видеть, я просто отлично прошел через это до открытой строки, после которой вы столкнулись со своей проблемой. (Он открывает, а затем закрывает соединение просто отлично, я проверил).

Комментарии:

1. являются ли пользовательские элементы управления такими же, как usercontrol ?? я думаю, что нет. ну, вы пробовали то же самое с UserControl??

2. Вы можете видеть в SS, что этот код является частью usercontrol. Открытый частичный класс usercontrol : usercontrol. На самом деле, если вы посмотрите на название вкладки: UserControl.

3. но по какой-то неизвестной причине у меня это не работает. дайте мне посмотреть. опубликует обновление

4. Есть какие-нибудь успехи с проектом, который я собрал для вас?