2013-07-29 3 views
2

Я пытаюсь подключиться к базе данных, и я получаю следующее сообщение об ошибке:«Запрещенные символы в пути» ошибка при подключении к SQL Server

Illegal characters in path.

Вот мой код:

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection Con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\targil3.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
    SqlDataAdapter adapt = new SqlDataAdapter(); 
    adapt.InsertCommand = new SqlCommand(" INSERT INTO tblEmployee VALUES (@employeeNumber, @employeePrivateName, @employeeFamilyName ,@city, @street, @houseNo, @phoneNumber, @birthDate, @startWorkingDate)", Con); 
    adapt.InsertCommand.Parameters.Add("@employeeNumber", SqlDbType.Char).Value = textBox1.Text; 
    adapt.InsertCommand.Parameters.Add("@employeePrivateName", SqlDbType.VarChar).Value = textBox2.Text; 
    adapt.InsertCommand.Parameters.Add("@employeeFamilyName", SqlDbType.VarChar).Value = textBox3.Text; 
    adapt.InsertCommand.Parameters.Add("@city", SqlDbType.VarChar).Value = textBox4.Text; 
    adapt.InsertCommand.Parameters.Add("@street", SqlDbType.VarChar).Value = textBox5.Text; 
    adapt.InsertCommand.Parameters.Add("@houseNo", SqlDbType.Int).Value = textBox6.Text; 
    adapt.InsertCommand.Parameters.Add("@phoneNumber", SqlDbType.Char).Value = textBox7.Text; 
    adapt.InsertCommand.Parameters.Add("@birthDate", SqlDbType.DateTime).Value = Convert.ToDateTime(textBox8.Text); 
    adapt.InsertCommand.Parameters.Add("@startWorkingDate", SqlDbType.DateTime).Value = Convert.ToDateTime(textBox8.Text); 


    Con.Open(); 
    adapt.InsertCommand.ExecuteNonQuery(); 
    Con.Close(); 
} 

Как чтобы подключиться к базе данных, чтобы я мог в нее вставить?

+2

Остановить использование AttachDbFileName. Прикрепите базу данных к экземпляру Express, затем подключитесь с использованием имени логической базы данных вместо указания пути. –

+0

Не могли бы вы рассказать мне, как это сделать? – user2023203

+0

Эй, попробуйте Google, это прекрасный поисковый движок! Я нашел [http://msdn.microsoft.com/en-us/library/ms190209(v=sql.105).aspx](http://msdn.microsoft.com/en-us/library/ms190209(v = sql.105) .aspx) – OzrenTkalcecKrznaric

ответ

8

Вам нужно бежать \targil3.mdf

Используйте \\ или положить @ перед назначением строки, например.

SqlConnection Con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\targil3.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
+0

Это решило, но мой код не будет обновлять базу данных – user2023203

+2

@ user2023203 - это звучит как новый вопрос, вам нужно будет задать новый вопрос о том, какие ошибки вы получаете при попытке обновить/вставить в базу данных. –

+0

@ user2023203 ... или хотя бы сказать, получаете ли вы какие-либо ошибки. – Ryan

0

Это потому, что у вас есть символы в строке соединения, которые необходимо экранировать. Чтобы преодолеть эту проблему, у вас есть несколько вариантов.

Either to explicitly escape those characters by using

\\ 

ИЛИ

use the @ sign before assignment.

PS: Хотя я бы рекомендовал вам указать строку соединения в app.config и читать его, как это

string conString = System.Configuration.ConfigurationManager.ConnectionStrings["yourConnectionString"].ToString(); 

и вы должны учитывать пользователя

using (SqlConnection sqlConn = new SqlConnection(conString)) 
{ 
    try 
    { 
     //your sql statements here 
    } 
    catch (InvalidOperationException) 
    { 

    } 
    catch (SqlException) 
    { 

    } 
    catch (ArgumentException) 
    { 

    } 
} 

Вы не столкнетесь с какими-либо ошибками, указанными выше.

+0

Я согласен с определением его в приложении.config, таким образом, если он по какой-то причине изменится, вам нужно только изменить его на одно место в коде, в отличие от каждого места, которое оно вызвало. – user2366842

Смежные вопросы