SQL连接字符串C#ASP NET

SQL连接字符串C#ASP NET,c#,sql,asp.net,sql-server,connection-string,C#,Sql,Asp.net,Sql Server,Connection String,因此,我正在制作一个提交内容页面,将用户输入的内容存储到数据库中,以下是我迄今为止的代码: protected void submitData_Click(object sender, EventArgs e) { string userId = HttpContext.Current.User.Identity.Name; int categoryId = Convert.ToInt32(categories.SelectedValue);

因此,我正在制作一个提交内容页面,将用户输入的内容存储到数据库中,以下是我迄今为止的代码:

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.";
        }
    }
但是,我收到一个错误,说连接字符串包含无效字符“\”,这是有道理的,但每当我转到数据库的属性并查看连接字符串属性时,它就会这样说。

我正在使用MicrosoftSQLServerExpress在本地托管数据库,如果这样做会改变什么。有人知道如何格式化这些连接字符串吗?

您必须对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"))

必须对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"))

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

要在逐字字符串文字中转义引号(前面有一个
@
),您需要“双引号”-双引号。像这样:

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

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

要在逐字字符串文字中转义引号(前面有一个
@
),您需要“双引号”-双引号。像这样:

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

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

实际上,使用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>

转义字符串中的双引号,对于逐字字符串,请使用双引号,如“数据源=(LocalDB)\MSSQLLocalDB;AttachDbFilename=”“C:\Users\Will\Documents\visualstudio 2015\WebSites\inshort\App\u Data\ASPNETDB.MDF”“;integratedsecurity=True”——投票以键入错误结束。这篇文章可能会帮助有类似问题的人学习如何正确使用转义字符。还有很多文章,因此,这个问题可以被视为字符串中双引号转义的重复,对于逐字字符串,使用双引号,如“数据源=(LocalDB)\MSSQLLocalDB;AttachDbFilename=”“C:\Users\Will\Documents\visualstudio 2015\WebSites\inshort\App\u Data\ASPNETDB.MDF”“;integratedsecurity=True”——投票以键入错误结束。这篇文章可能会帮助有类似问题的人学习如何正确使用转义字符。还有很多文章,因此,这个问题也可以被视为这一技巧的重复,我会尽快接受这个答案;初始目录=SQLDatabaseName@Chuck:这对LocalDB有用吗?仅仅为了使连接字符串看起来更干净而更改整个SQL基础结构似乎不是一个很好的使用方法。这就成功了,我会尽快接受这个答案。您确实应该使用以下格式:Data Source=DataBaseServerName;初始目录=SQLDatabaseName@Chuck:这对LocalDB有用吗?仅仅为了使连接字符串看起来更干净而更改整个SQL基础结构似乎不是一个很好的方法。您的配置中缺少了双引号。您的配置中缺少了双引号。