Nganku Junior Ответов: 1

Как определить и использовать строку подключения в моем приложении C#


Привет, я хочу знать, как определить строку подключения и успешно использовать ее в своем приложении. Идея состоит в том, чтобы определить один раз и использовать по мере необходимости.
Я последовал этому совету здесь :

Как получить строку подключения из App. Config в C#[^]

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

"Ссылка на объект не определена на экземпляр объекта" на уровне оператора
var connectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;


Что я должен сделать, чтобы разобраться в этой ситуации, пожалуйста ?

Что я уже пробовал:

1. Сначала я добавил этот код в файл config. app:

<connectionStrings>
    <add name= "con" 
         providerName= "System.Data.SqlClient" 
         connectionString="Data Source=.\sqlexpress;Initial Catalog=practice;Integrated Security=True" />
    </connectionStrings>


2. Далее я добавил ссылку на систему.Конфигурация

3. событие click элемента управления my button имеет код :

var connectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
            
            string ins = @"insert into employee(name, address, phonenum, profession) values(@nam, @add, @phonen, @job)";

                SqlCommand cmd = new SqlCommand(ins, con);
                SqlParameter NM = new SqlParameter();
                NM.ParameterName = "nam";
                NM.Value = nametxt.Text;

                SqlParameter AD = new SqlParameter();
                AD.ParameterName = "add";
                AD.Value = addresstxt.Text;

                SqlParameter PN = new SqlParameter();
                PN.ParameterName= "phonen";
                PN.Value = telephonetxt.Text;

                SqlParameter PF = new SqlParameter();
                PF.ParameterName = "job";
                PF.Value = professiontxt.Text;

                cmd.Parameters.Add(AD);
                cmd.Parameters.Add(PN);
                cmd.Parameters.Add(NM);
                cmd.Parameters.Add(PF);
                con.Open();
                cmd.ExecuteNonQuery();
                MessageBox.Show("Values Entered", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                con.Close();

F-ES Sitecore

Убедитесь, что вы обновляете правильный файл app.config, особенно если у вас есть несколько проектов в вашем решении.

Nganku Junior

У меня есть один проект в моем решении

Karthik_Mahalingam

протестировали ваш код, он отлично работает..
возможно, вы что-то упускаете

PeejayAdams

Да, мне это тоже нравится. Убедитесь, что ваш сегмент "connectionstrings" находится на вкладке "конфигурация", и, как предлагает F-ES, убедитесь, что вы имеете дело с правильным файлом app.config.

Nganku Junior

Замечания должным образом приняты к сведению. Я пройду через это еще раз. Спасибо!

Nganku Junior

У меня та же проблема, должно быть, я что-то упускаю. Но я не могу понять что

ZurdoDev

Каков путь к вашему проекту? О каком проекте идет речь? Каков путь к обновляемому конфигурационному файлу?

Nganku Junior

Путь к моему проекту как в абсолютном пути? Проект представляет собой приложение Windows Form.

ZurdoDev

Да, пути к файлам.

Nganku Junior

Путь проекта таков ; C:\Users\Le Parrain\Documents\Visual Studio 2015\Projects\TrialApCfg

Путь к конфигурационному файлу; C:\Users\Le Parrain\Documents\Visual Studio 2015\Projects\TrialApCfg\TrialApCfg\App. config

F-ES Sitecore

Это файл Visual Studio поддерживает, файл приложение использует при работе, вероятно, будет \проекты\TrialApCfg\TrialApCfg\\бин\отладки\TrialApCfg.exe-файла.конфиг

При компиляции проекта файл app. config переименовывается и перемещается. Проверьте, что строка подключения находится в* этом * файле.

Nganku Junior

Йа! строка подключения находится в этом файле с именем path;
C:\Users\Le документы Parrain\\визуальной студии 2015\проекты\TrialApCfg\TrialApCfg\бин\ "отладка".
Вот как это выглядит;

& lt;?xml version=" 1.0 "encoding=" utf-8"? >
& lt;конфигурация>
& lt;запуск & gt;
&ЛТ;supportedRuntime версия="В4.0" артикул=".NETFramework, версия=v4. 5" />

& lt;соединительные нити>
< добавить имя= " con"
система имя_поставщика=".Данных.Поставщики sqlclient"
connectionString= "источник данных=.\sqlexpress;начальный каталог=практика;Интегрированная безопасность=True"/>

Richard MacCutchan

Решение этой проблемы довольно простое: сначала определите, какая ссылочная переменная вызывает исключение. Во-вторых, определите, почему он равен нулю, и исправьте код. Отладчик поможет вам найти это.

Кроме того, что еще более важно, не делайте следующего:

MessageBox.Show("Values Entered", "", MessageBoxButtons.OK, MessageBoxIcon.Information);

когда вы не проверяете, что ваш SQL-оператор успешно выполнен. Если вы сделаете это в живой базе данных, вы наверняка пожалеете об этом.

Tomas Takac

На самом деле вы не показываете, как вы создаете сам объект соединения. Вы просто получаете строку подключения, а затем используете переменную con для создания объекта команды. Может быть, там есть какая-то проблема? Кстати, SqlConnection и SqlCommand являются одноразовыми, поэтому вы должны заключить их в блок using.

Nganku Junior

Это представление кода

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
используя системы.Сведения;
использование системы.Рисование;
использование System. Linq;
используя системы.Текст;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование системы.Конфигурация;
используя системы.Данных.Поставщики sqlclient;

пространство имен TrialApCfg
{
общественности частичного класс form1 : форма
{
Sqlconnection con;
открытый form1()
{
метод InitializeComponent();
}

частная btn_enter_Click недействительным(объект отправителя, EventArgs в электронной)
{
var connectionString = ConfigurationManager.ConnectionStrings ["con"].Параметр connectionString;

строка ins = @ " вставить в значения employee(name) (@nam)";

SqlCommand cmd = new SqlCommand(ins, con);
Объект sqlparameter Нм = новый объект sqlparameter();
Нм.Имяпараметра = "дн";
Нм.Значение = txtboxname.Текст;
УМК.Параметры.Добавить (Нм);
кон.Открыть();
УМК.Метод executenonquery();
Ящик для сообщений.Show ("Введенные Значения","", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);
кон.Рядом();

Tomas Takac

Ну, насколько я вижу, sqlconnection con никогда не инициализируется. Я предполагаю, что вы хотите создать новое соединение, используя ту строку подключения, которую вы извлекаете из файла app.config. Я думаю, что на данный момент все должно быть ясно.

Nganku Junior

Это представление кода

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
используя системы.Сведения;
использование системы.Рисование;
использование System. Linq;
используя системы.Текст;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
использование системы.Конфигурация;
используя системы.Данных.Поставщики sqlclient;

пространство имен TrialApCfg
{
общественности частичного класс form1 : форма
{
Sqlconnection con;
открытый form1()
{
метод InitializeComponent();
}

частная btn_enter_Click недействительным(объект отправителя, EventArgs в электронной)
{
var connectionString = ConfigurationManager.ConnectionStrings ["con"].Параметр connectionString;

строка ins = @ " вставить в значения employee(name) (@nam)";

SqlCommand cmd = new SqlCommand(ins, con);
Объект sqlparameter Нм = новый объект sqlparameter();
Нм.Имяпараметра = "дн";
Нм.Значение = txtboxname.Текст;
УМК.Параметры.Добавить (Нм);
против.Открыть();
УМК.Метод executenonquery();
Ящик для сообщений.Show ("Введенные Значения","", MessageBoxButtons.Хорошо, MessageBoxIcon.Информация);
против.Закрывать();

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.

Nganku Junior

Вас Понял

Karthik_Mahalingam

вас понял :)

1 Ответов

Рейтинг:
12

Nganku Junior

Эй, ребята, я нашел ту маленькую вещицу, которой не хватало:
Это действительно сделало это:

private void btn_enter_Click(object sender, EventArgs e)
{
var connectionString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
 
SqlConnection cn= new SqlConnection(connectionString); //This is all I had to add
string ins = @"insert into employee(name) values(@nam)";

SqlCommand cmd = new SqlCommand(ins, cn);//Brought in a few modifications 
SqlParameter NM = new SqlParameter();
NM.ParameterName = "nam";
NM.Value = txtboxname.Text;
cmd.Parameters.Add(NM);
cn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Values Entered", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
cn.Close();