Я не могу подключиться к базе данных SQL Server с кодом С#

Я пытался создать регистрационную форму, но когда я запускаю свой проект, я получаю это сообщение об ошибке

Возникло исключение: «System.Data.SqlClient.SqlException» в System.Data.dll

Мой код:

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

namespace Registration{
private void Register_Click(object sender, EventArgs e)
{

     SqlConnection con = new SqlConnection("Data Source=SHAB 
     SQLEXPRESS;InitialCatalog=Phonebook;Integrated Security=True"); 

     SqlCommand cmd = new SqlCommand(@"INSERT INTO [dbo].[registration]([username[fullname],[Password]) VALUES('" + username.Text+"', '"+fullname.Text+"', '"+password.Text+"')");

     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     MessageBox.Show("Congradulation You have been Registered");
}

Ошибка появляется в строке con.open();.

Возникло исключение: «System.Data.SqlClient.SqlException» в System.Data.dll

Дополнительная информация:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен на разрешение удаленных подключений. (поставщик: Named Pipes


person Professor Shab    schedule 02.09.2019    source источник
comment
что-то не так между именем пользователя и частью полного имени INSERT INTO [dbo].[registration]([username[fullname],[Password])   -  person Curious    schedule 02.09.2019
comment
ваша машина называется Shab sqlexpress? Я бы сомневался в этом, не может быть имен машин с пробелами .. Shab - это имя машины? в этом случае shab/sqlexpress или, если нет, может быть ./sqlexpress .. в любом случае он говорит вам, что не может найти его через именованные каналы   -  person BugFinder    schedule 02.09.2019
comment
Привет, имя моей машины shab, имя сервера базы данных SHAB\SQLEXPRESS, но когда я пишу SHAB\SQLEXPRESS, я получаю сообщение об ошибке на знаке \ Backslash   -  person Professor Shab    schedule 02.09.2019
comment
@ProfessorShab: вам нужно использовать SHAB\\SQLEXPRESS (две обратную косую черту)   -  person marc_s    schedule 02.09.2019
comment
Предупреждение о SQL-инъекциях — следует не объединяйте операторы SQL вместе — вместо этого используйте параметризованные запросы, чтобы избежать внедрения SQL — проверьте Маленькие столы Bobby   -  person marc_s    schedule 02.09.2019


Ответы (5)


Вы пропустили запятую между [username] и [fullname]. Попробуйте как:

INSERT INTO ... ([username], [fullname], ...

Также очень важно использовать параметры sql

person apomene    schedule 02.09.2019

Сначала проверьте, запущена ли служба SQL Server. после этого проверьте значение источника данных в строке подключения, если вы используете SQLExpress, это может быть SqlConnection con = new SqlConnection("Data Source=SHAB\SQLEXPRESS;InitialCatalog=Phonebook;Integrated Security=True");

person Basher    schedule 02.09.2019
comment
Я добавил косую черту, как вы сказали, я получаю это сообщение Исключение: «System.Data.SqlClient.SqlException» в System.Data.dll Дополнительная информация: Ошибка входа в систему для пользователя «SHAB\Professor Shab». code SqlConnection con = new SqlConnection (Источник данных = SHAB\\SQLEXPRESS; Исходный каталог = Телефонная книга; ID пользователя = SHAB\\ Профессор Шаб;); SqlCommand cmd = new SqlCommand(@INSERT INTO [dbo].[registration]([username],[fullname],[Password]) //VALUES(' + username.Text+', '+fullname.Text+', '+password .Текст+')); кон.Открыть(); - person Professor Shab; 02.09.2019
comment
если вы указываете идентификатор пользователя, вам также нужно указать пароль. - person Basher; 02.09.2019

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или конкретным экземпляром. Сервер не найден или не был доступен.

Как указывает ошибка, ваше соединение не может получить доступ к SQL Server, убедитесь, что вы можете сделать telnet SHAB 1433

Если Telnet не удается:

  • Убедитесь, что протокол TCP/IP включен, вы можете проверить это с помощью диспетчера конфигурации SQL Server (следующий снимок экрана для справки).
  • Убедитесь, что настраиваемый порт НЕ настроен (через диспетчер конфигурации SQL Server) для службы SQL Express.

Если пользовательский порт НЕ настроен

  1. Убедитесь, что служба SQL Browser запущена.
  2. Создайте правило в брандмауэре Windows, чтобы принимать входящие соединения на TCP-портах 1433 и 1434 (TCP and UDP). Это необходимо сделать на сервере, на котором запущена служба SQL.
  3. Перезапустите службу браузера SQL.
  4. Ваше соединение должно работать здесь с DataSource=SHAB\\SQLEXPRESS. Вы можете сделать telnet SHAB 1433, чтобы проверить

Если настроен пользовательский порт

  1. Создайте правило в брандмауэре Windows для приема входящих подключений через настраиваемые порты TCP. Это необходимо сделать на сервере, на котором запущена служба SQL.
  2. Перезапустите службу SQL
  3. Ваше соединение должно работать здесь, когда вы используете DataSource = SHAB,<custom port>. Однако вы можете сделать telnet SHAB <custom port>, чтобы проверить

Диспетчер конфигурации SQL Server: введите здесь описание изображения

person Shekar Kola    schedule 02.09.2019

Ваша строка подключения должна быть в файле app.config.

<connectionStrings>
    <add name="DbConnection" connectionString="Data Source=.\SQLEXPRESS;Initial 
    Catalog=dbname;Integrated Security=True" 
    providerName="System.Data.EntityClient"
<connectionStrings>

импортировать конфигурацию из

using System.Configuration;

Добавить подключение к БД

public string DbCon = 
 ConfigurationManager.ConnectionStrings["DbConnection"].ToString();

var Query=@"INSERT INTO [dbo].[registration]([username[fullname],[Password]) VALUES('" + username.Text+"', '"+fullname.Text+"', '"+password.Text+"')"
using (con = new SqlConnection(DbCon))
        {
            con.Open();
            SqlCommand com = new SqlCommand(Query, con);
            com.ExecuteNonQuery();
            con.Close();
        }
person Harley    schedule 02.09.2019
comment
Почему строка подключения должна быть в app.config? Конструктор SqlConnection просто принимает строковый параметр для строки подключения. - person Diado; 02.09.2019
comment
Для лучшего подхода это должно быть в app.config, иначе вы можете добавить строку подключения в любом месте проекта, это полностью зависит от вас. - person Harley; 03.09.2019
comment
Это не имеет никакого отношения к проблеме, опубликованной в вопросе, это просто семантика того, где хранится строка подключения - перемещение строки подключения в app.config не решит проблему. - person Diado; 03.09.2019

Я думаю, что вы просто пропустили имя пользователя и пароль в строке подключения. Попробуйте следующий код.

Data Source=YourServer;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword
person CSharpAlchemist    schedule 02.09.2019
comment
Строка подключения, опубликованная OP, использует встроенную безопасность. - person Diado; 02.09.2019
comment
Наверное, это должен быть комментарий! - person tituszban; 02.09.2019
comment
Спасибо, я новичок в переполнении стека, спасибо за помощь, private void, это код, который я написал, а не результат. - person Professor Shab; 02.09.2019
comment
private void Register_Click (отправитель объекта, EventArgs e) { SqlConnection con = new SqlConnection (Источник данных = SHAB\\SQLEXPRESS; Исходный каталог = Телефонная книга; ID пользователя = SHAB\\ Профессор Шаб;); SqlCommand cmd = new SqlCommand(@INSERT INTO [dbo].[registration]([username],[fullname],[Password]) //VALUES(' + username.Text+', '+fullname.Text+', '+password .Текст+')); кон.Открыть(); cmd.ExecuteNonQuery(); кон.Закрыть(); MessageBox.Show(Поздравляем, вы зарегистрированы); } - person Professor Shab; 02.09.2019
comment
Это ошибка, при которой возникает исключение: «System.Data.SqlClient.SqlException» в System.Data.dll. Дополнительная информация: Ошибка входа в систему для пользователя «SHAB\Professor Shab». - person Professor Shab; 02.09.2019
comment
Это ошибка, при которой возникает исключение: «System.Data.SqlClient.SqlException» в System.Data.dll. Дополнительная информация: Ошибка входа в систему для пользователя «SHAB\Professor Shab». - person Professor Shab; 02.09.2019