2015-07-06 2 views
0

Так что я работаю на создание отправке содержимого страницы, которая будет хранить вход пользователей в базу данных, вот код, который я до сих пор:SQL Строка подключения C# ASP NET

protected void submitData_Click(object sender, EventArgs e) 
    { 
     string userId = HttpContext.Current.User.Identity.Name; 
     int categoryId = Convert.ToInt32(categories.SelectedValue); 
     if (categoryId > 0 && content.Text != "" && description.Text != "") 
     { 
      using (SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="C: \Users\Will\Documents\Visual Studio 2015\WebSites\inshort\App_Data\ASPNETDB.MDF";Integrated Security=True")) 
      { 
       SqlCommand cmd = new SqlCommand("INSERT INTO aspnet_newscontent (author, username, date, category, content, description) VALUES (@author, @username, @date, @category, @content, @description)"); 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.Connection = connection; 
       cmd.Parameters.AddWithValue("@author", nameInput.Text); 
       cmd.Parameters.AddWithValue("@username", userId); 
       cmd.Parameters.AddWithValue("@date", DateTime.Today); 
       cmd.Parameters.AddWithValue("@category", categoryId); 
       cmd.Parameters.AddWithValue("@content", content.Text); 
       cmd.Parameters.AddWithValue("@description", description.Text); 
       connection.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     else 
     { 
      errorLabel.Text = "Please fill in the required fields."; 
     } 
    } 

Однако я получив сообщение о том, что строка соединения содержит недопустимый символ «\», что имеет смысл, но всякий раз, когда я перехожу к свойствам моей базы данных и смотрю на свойство Connection String, это то, что он говорит.
Я использую Microsoft Sql Server Express для локального размещения базы данных, если это что-то меняет. Кто-нибудь знает, как отформатировать эти строки подключения?

+0

избежать двойных кавычек в строке, для дословной строки, используйте двойную * двойную * кавычку, как '@ "Источник данных = (LocalDB) \ MSSQLLocalDB; AttachDbFilename ="" C: \ Users \ Will \ Documents \ Visual Studio 2015 \ WebSites \ inshort \ App_Data \ ASPNETDB.MDF ""; Integr ated Security = True "' - ГОЛОСОВАТЬ, ЧТОБЫ ЗАКРЫТЬ КАК TYPO – Habib

+0

Возможно, этот пост поможет людям с подобными проблемами научиться правильно использовать escape-символы. –

+0

Есть много сообщений на SO для этого, этот вопрос можно рассматривать как дубликат http://stackoverflow.com/questions/1928909/can-i-escape-a-double-quote-in-a-verbatim -string-literal – Habib

ответ

2

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

Чтобы избежать кавычек в стенографическом литерале (один из которых добавлен @), вам необходимо «удвоить» -дублировать их. Например:

@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""C:\Users\Will\Documents\Visual Studio 2015\WebSites\inshort\App_Data\ASPNETDB.MDF"";Integrated Security=True" 
+0

Это сделало трюк, я приму этот ответ, как только это позволит мне. –

+0

Вы действительно должны использовать этот формат: Data Source = DataBaseServerName; Initial Catalog = SQLDatabaseName – Chuck

+0

@Chuck: Будет ли это работать с LocalDB вообще? Изменение всей инфраструктуры SQL просто для того, чтобы сделать строку подключения более чистой, не кажется хорошим использованием усилий. – David

2

Вы должны избежать определенных символов в строке C#. Если Вы убираете «буквального» строка символов (@), это будет выглядеть следующим образом:

using (SqlConnection connection = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Will\\Documents\\Visual Studio 2015\\WebSites\\inshort\\App_Data\\ASPNETDB.MDF\";Integrated Security=True")) 
1

Как указывалось другими, вам необходимо избегать специальных символов в строке соединения.

На практике, с asp.net многие разработчики просто поместить строку соединения в их web.config, а затем получить доступ к нему позже этот путь, если он когда-либо изменения, которые вы должны изменить только в одном месте:

<connectionStrings> 
    <add name="MyConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C: \Users\Will\Documents\Visual Studio 2015\WebSites\inshort\App_Data\ASPNETDB.MDF;Integrated Security=True/> 
    </connectionStrings> 

И то доступ к нему с помощью:

private string GetConnectionString() 
{ 
    return System.Configuration.ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 
} 
+0

Вам не хватает двойных кавычек в вашей конфигурации. – mason

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