C#SQL Server数据库连接字符串语法错误

时间:2018-04-25 03:33:41

标签: c# sql-server database

我对C#很陌生,所以我使用教程来实现。

我正在关注创建登录表单的youtube教程。链接here,在10:00分钟进入视频时,他开始输入之前从数据库中检索到的连接字符串。

我按照完全相同的步骤输入以下内容:

SqlConnection connnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="C: \Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Database1.mdf";Integrated Security=True");

然而,我惊讶地发现有26条错误与该线有关。我怀疑这与字符串有关,因为我读到了here

  

您还必须转义连接字符串中的后反斜杠\成为此\\

但是,通过在字符串前面使用@符号,我在阅读here时会变成verbatim string,这样就不会出现问题。

现在,我假设问题出在我的app.config上,我在其他帖子中看到他们在那里添加连接字符串,然后创建一个引用该连接字符串的新连接字符串,但是在列出的教程中,他没有这样做,这让我感到困惑。

的App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

登录按钮

private void buttonLogin_Click(object sender, EventArgs e)
{
    SqlConnection connnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="C: \Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Database1.mdf";Integrated Security=True");

    SqlDataAdapter sda = new SqlDataAdapter("select count(*) from login where Username ='" + textBoxUsername.Text + "' and Password='" + textBoxPassword.Text + "'", connnection);

    DataTable dt = new DataTable();
    sda.Fill(dt);

    if (dt.Rows[0][0].ToString() == "1")
    {
        LoginSuccess();
    }
    else
    {
        MessageBox.Show("Failed login.");
    }
}

错误消息

  

错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1009无法识别的转义序列Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1056意外字符&#39; \&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1056意外字符&#39; \&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1056意外字符&#39; \&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1056意外字符&#39; \&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1012字符文字Kops&#39;中的字符过多工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1009无法识别的转义序列Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1056意外字符&#39; \&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1003语法错误,&#39;,&#39;预计Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1739&#39; SqlConnection&#39;的最佳重载没有名为&#39; C&#39;芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39;用户&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39;凯文&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS1738在指定了所有固定参数后,必须出现命名参数规范。请使用语言版本7.2或更高版本以允许非尾随命名参数。芭斯&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39;来源&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39; repos&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39; Kops&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39;工具箱&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62有效
  错误CS0103名称&#39;数据库1&#39;在目前的背景下不存在Kops&#39;工具箱C:\ Users \ Kevin \ source \ repos \ Kops&#39;工具箱\芭斯&#39; Toolbox \ Form1.cs 62 Active

名为Database1的数据库名为UserData

enter image description here

1 个答案:

答案 0 :(得分:1)

你快到了。主要问题是你的字符串包含双引号;但是字符串本身是用双引号分隔的,所以你需要逃避&#39;那个角色(尽管已接受的答案与逐字字符串相关的问题没有提及 - 我会添加评论,但另一个答案提到它。)

您应该能够通过编辑器中的来源着色来确定它是不对的。如果你不能,那就找一个更好的编辑。

转义的方式因普通字符串和逐字字符串而异。使用逐字字符串,只需将双引号加倍,如下所示:

SqlConnection connnection = new SqlConnection(
    @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Database1.mdf"";Integrated Security=True");

(我删除了C:之后的空格)

额外提示:

  • SqlConnection和SqlDataAdapter(以及SqlCommand,供将来参考)是IDisposable,因此应该在using块中。
  • 此代码容易受到Sql注入攻击 - 请在您完成此操作后阅读相关内容。
  • 您只需要第一行的第一个值,因此请尝试创建SqlCommand,并使用ExecuteScalar。