Возможные причины, по которым SqlConnection имеет значение NULL

131
17

Недавно была установлена Visual Studio 2012, но теперь я не могу подключиться к нашей базе данных SQL Server.

Это те шаги, которые я выполняю

создать App1.config

введите это в App1.config:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name ="xxx" connectionString="USER ID=xx;PASSWORD=xx;PERSIST SECURITY INFO=True;Data Source=xx;Initial Catalog=xx" />
</connectionStrings>
</configuration>

Добавить ссылку на проект в System.Configuration

Создайте доступ к пространствам имен через:

 using System.Data.SqlClient;
using System.Data;
using System.Configuration;

выполните следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace ConsoleApplication10 {
class Program {
static void Main(string[] args) {

SqlConnection conn = null;
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["xxx"].ConnectionString);

}
}
}

Я создал новое консольное приложение и добавил выше, и я все равно получаю сообщение об ошибке. NullReferenceException was unhandled Object reference not set to an instance of an object....

enter image description here

РЕДАКТИРОВАТЬ

Через ближайшее окно я определил, что следующее значение равно null:

ConfigurationManager.ConnectionStrings["xxx"].ConnectionString

Если я жестко SqlConnection строку подключения в конструкторе для SqlConnection тогда она соединяется нормально

Что мне не хватает - что-то действительно очевидное! Или это связано с моим новым ВС?

спросил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
1
Решение
87

проверьте, что находится в ConfigurationManager.ConnectionStrings, исключив, по крайней мере, следующее:

if (ConfigurationManager.ConnectionStrings != null ) {
Console.WriteLine(ConfigurationManager.ConnectionStrings.Count);
Console.WriteLine(ConfigurationManager.ConnectionStrings[0].ConnectionString);
Console.WriteLine(ConfigurationManager.ConnectionStrings[0].Name);
....
} else {
Console.WriteLine("null");
}

Это выявит любые очевидные проблемы, такие как дублирование файла App.config что вполне может быть так, как вы упомянули App1.config в OP.

ответил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
86

Проверьте папку вывода.

Предполагая, что ваше приложение называется myapp.exe, должно быть myapp.exe.config.


Это должно существовать и должно содержать содержимое вашего файла app.config в Visual Studio.

Если это не так, проверьте, есть ли у вас файл app.config другом месте (я заметил, что вы вызвали файл app1.config)

ответил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
76

Убедившись в том, что ваш код не "ничего делает" с conn еще, я уверен, что ConfigurationManager возвращает null для имени строки подключения, в которое вы проходите. Исключение SqlConnection конструктором SqlConnection при передаче в null вместо действительная строка подключения.

ответил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
75

Попробуйте проверить, что такое значение ConfigurationManager.ConnectionStrings ["xxx"]. ConnectionString и hardcoding с этим значением? Вы все еще получаете нуль?

Также рекомендуется создать соединение следующим образом:

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["xxx"].ConnectionString))
{
//code
}

Я бы ответил, но у меня еще недостаточно репутации... :-(

ответил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
44

Когда вы помещаете свои строки подключения в Properties-> "Настройки", в качестве строки подключения, обращайтесь к ним с полным пространством имен и вашим завершением.

См. Мой ответ здесь

ответил(а) 2021-01-19T16:10:46+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема