【发布时间】: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