【问题标题】:Database problem in visual studio (c# and SQL Server)Visual Studio 中的数据库问题(c# 和 SQL Server)
【发布时间】:2020-06-10 17:12:21
【问题描述】:

我正在编写一个 Windows 窗体应用程序,我必须在该应用程序中模拟统计谁在课堂上失踪。我在 Visual Studio 中创建了一个运行良好的数据库。我还在youtube上找到了一个关于如何做的教程,所以我做到了。在视频的一部分中,他在查询中放置了一个“@(表中变量的名称)”而不是一个值。对他来说有效,对我来说无效,我不知道为什么。请帮忙。

private void napuniUcenici()
{
    string query = "SELECT a.Ime FROM Ucenici a " +
                   "INNER JOIN RazrediUcenici b ON a.Id = b.UcenikId " +
                   "WHERE b.RazredId = @RazredId";

    using (connection = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand(query, connection))
    using (SqlDataAdapter adapter = new SqlDataAdapter(command))
    {
        command.Parameters.AddWithValue("@RazredId", lstUcenici.SelectedValue);

        DataTable uceniciTable = new DataTable();
        adapter.Fill(uceniciTable);

        lstUcenici.DisplayMember = "Ime";
        lstUcenici.ValueMember = "Id";
        lstUcenici.DataSource = uceniciTable;
    }
}

当我在代码中调用此函数时会发生这种情况。它返回这个按摩:

System.Data.SqlClient.SqlException:

'参数化查询 '(@RazredId nvarchar(4000))SELECT a.Ime FROM Ucenici a INNER JOIN' 需要未提供的参数“@RazredId”。

另外,RazredId 不是navchar(4000),它是一个常规整数。视频中的那个人没有这个问题。

视频:https://www.youtube.com/watch?v=_PCBTiXL884

[1

[2

[3

【问题讨论】:

  • 您检查过lstUcenici.SelectedValue 的值吗?我确定它不能为空,也许它是
  • 列表框中没有值。里面应该有值吗?
  • 您正在尝试对查询应用过滤器,它应该是一个值。
  • 它说 nvarchar(4000) 因为你使用了 AddWithValue。 AddWithValue 不是一个好用的东西——你应该找到一个更好的教程。见Can we stop using AddWithValue already?
  • 我查看了您发送的链接,他们提供的示例说它必须等于某些东西,只是不知道是什么。我对数据库集成不是很有经验。

标签: c# sql-server winforms


【解决方案1】:

尝试传递一个显式值: command.Parameters.AddWithValue("@RazredId", 1); 看看发生了什么。与之前的回复不同,在参数名称中保留 @ 是正确的。

【讨论】:

    【解决方案2】:

    好吧,伙计们,所以...我很愚蠢 xD 我做错的是这一行中的第二个参数是错误的(lstRazredi 以前是 lstUcenici 这是错误的表)

    command.Parameters.AddWithValue("@RazredId", lstRazredi.SelectedValue);
    

    所以我改变了它,现在我可以完美地工作了。 打扰了。

    【讨论】:

      【解决方案3】:

      也许您需要在将命令传递给适配器之前添加参数?

      【讨论】:

      • 我认为这是一个更好的评论
      • 我同意,但我还不能制作 cmets。而你并没有真正帮助:)
      猜你喜欢
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多