【问题标题】:C# SQL Server database connection string syntax errorsC# SQL Server 数据库连接字符串语法错误
【发布时间】:2018-04-25 13:38:02
【问题描述】:

我对 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 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1009 无法识别转义序列 Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1056 意外字符 '\' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1056 意外字符 '\' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1056 意外字符 '\' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1056 意外字符 '\' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1012 字符文字 Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
中有太多字符 错误 CS1009 无法识别转义序列 Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1056 意外字符 '\' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1003 语法错误,',' 预期 Kops' 工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1739 'SqlConnection' 的最佳重载没有名为 'C' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称“用户” Kops 的工具箱 C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'Kevin' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS1738 命名参数规范必须在指定所有固定参数后出现。请使用语言版本 7.2 或更高版本以允许非尾随命名参数。 Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'source' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'repos' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'Kops' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'Toolbox' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active
错误 CS0103 当前上下文中不存在名称 'Database1' Kops' Toolbox C:\Users\Kevin\source\repos\Kops' Toolbox\Kops' Toolbox\Form1.cs 62 Active

数据库,名为Database1的表名为UserData

【问题讨论】:

  • 试试这个:"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\Kevin\\source\\repos\\Kops\' Toolbox\\Kops\ ' Toolbox\\Database1.mdf\";Integrated Security=True";
  • 我推荐你使用实体框架之类的ORM工具
  • c: 后面还有一些大空间
  • @TS 连接字符串被复制和粘贴,那个空间就在那里。我也尝试删除空间并运行它无济于事。

标签: c# sql-server database


【解决方案1】:

你快到了。主要问题是您的字符串包含双引号;但是字符串本身由双引号分隔,因此您需要“转义”该字符(尽管逐字字符串上已接受的答案链接问题没有提及 - 我将添加评论,但其他答案提到了它) .

您应该能够通过编辑器中源代码的颜色看出它不正确。如果你不能,那就找一个更好的编辑器。

普通字符串和逐字字符串的转义方式不同。使用逐字字符串,只需像这样将双引号加倍:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多