SQL连接字符串C#ASP NET

时间:2015-07-06 17:39:16

标签: 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);
        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在本地托管数据库,如果它发生任何变化。有人知道如何格式化这些连接字符串吗?

3 个答案:

答案 0 :(得分: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 :(得分:2)

查看语法高亮显示。你试图将未转义的双引号放在一个字符串中,这显然会使解析器混淆,因为它认为你的字符串先前已经终止,并且在它之后只是语法错误。

要在逐字字符串文字中转义引号(一个前缀为@),您需要" double" -double引用它们。像这样:

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

答案 2 :(得分: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;
}