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;
}
所以我正在制作一个将用户输入存储到数据库中的提交内容页面,这是我目前拥有的代码:
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;
}