System.ArgumentException:“键 'attachdbfilename' 的值无效。”

Posted

技术标签:

【中文标题】System.ArgumentException:“键 \'attachdbfilename\' 的值无效。”【英文标题】:System.ArgumentException: 'Invalid value for key 'attachdbfilename'.'System.ArgumentException:“键 'attachdbfilename' 的值无效。” 【发布时间】:2021-07-18 19:49:36 【问题描述】:

从我的单选按钮列表中选择候选人后,每次按下“投票”按钮时,我都会尝试更新我的 SQL Server 数据库中的投票计数。

单选按钮列表有 3 个候选人,一旦选择了候选人,就会按下投票按钮。我希望我的数据库在按下投票按钮后更新。但是,我尝试了许多不同的解决方案,但都没有成功。

我的数据库有一个表,其中包含 Id 键(数字 ID)、Name(候选人姓名)和 Vote(相应候选人的票数)。

这是我最新的尝试:

public void update_db(string candidate)

    const string connString = @"Data Source = (LocalDB)\MSSQLLocalDB; AttachDbFilename =| DataDirectory |\Candidates.mdf; Integrated Security = True";

    SqlConnection conn = new SqlConnection(connString);
    conn.Open();

    SqlCommand cmd = new SqlCommand("UPDATE Vote SET Vote=Vote+1 WHERE name='" + candidate + "'", conn);
    cmd.ExecuteNonQuery();
    conn.Close();

但是,当我运行我的项目时,以下行出现以下错误:

SqlConnection conn = new SqlConnection(connString);

System.ArgumentException: '键 'attachdbfilename' 的值无效。'

我还尝试从 Visual Studio 的属性菜单中将 UpdateQuery 更改为 SqlDataSource1

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     SelectCommand="SELECT * FROM [Table]" 
     UpdateCommand="UPDATE Candidates SET Vote = Vote+1 WHERE Vote = @id2 ">
     <UpdateParameters>
         <asp:ControlParameter ControlID="RadioButtonList1" Name="id2" PropertyName="SelectedValue" />
     </UpdateParameters>
</asp:SqlDataSource>

【问题讨论】:

SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 请看Bad habits: Using AttachDBFileName和***.com/questions/11178720/… 【参考方案1】:

必须不带空格:

AttachDbFilename=|DataDirectory|\Filename.mdf

请注意,如果需要,您可以使用绝对路径:

AttachDbFilename=C:\MyDatabases\Filename.mdf

【讨论】:

以上是关于System.ArgumentException:“键 'attachdbfilename' 的值无效。”的主要内容,如果未能解决你的问题,请参考以下文章

System.ArgumentException: 无法找到字体“?”。

CreateSQLQuery(string) 抛出 System.ArgumentException

HttpClient 抛出 System.ArgumentException:'windows-1251' 不是受支持的编码名称

System.ArgumentException 路径中的非法字符

尝试使用 DataGridViewComboBox 和 ValueMember 时出现 System.ArgumentException

CreateSQLQuery(string)抛出System.ArgumentException