SQL 连接字符串 C# ASP NET

SQL Connection String 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.";
        }
    }

但是,我收到一条错误消息,指出连接字符串包含无效字符“\”,这是有道理的,但每当我转到数据库的属性并查看连接字符串 属性 时,即它说的是什么。
如果发生任何变化,我正在使用 Microsoft Sql Server Express 在本地托管数据库。有人知道如何格式化这些连接字符串吗?

您必须转义 C# 字符串中的某些字符。如果你去掉 "literal" 字符串字符 (@),它将看起来像这样:

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"))

查看语法突出显示。您试图将未转义的双引号放入字符串中,这显然会使解析器感到困惑,因为它认为您的字符串提前终止并且在它之后充满语法错误。

要转义逐字字符串文字中的引号(前缀为 @),您需要 "double"-双引号。像这样:

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

正如其他人所指出的,您需要转义连接字符串中的特殊字符。

实际上,对于 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;
}