【发布时间】:2016-02-22 15:06:45
【问题描述】:
我正在使用以下代码尝试从 SQL Server 数据库表中返回结果
MySqlCommand.CommandText = "SELECT * FROM dbo.MyTable WHERE [My Id] = @variable";
MySqlCommand.Parameters.Add("@variable", SqlDbType.Int).Value = GetsMyId(this.Mycombobox.SelectedItem.ToString());
我尝试过使用 .Parameters.AddWithValue("@variable",value);但我已经阅读了这些缺点并决定改用这种方法。该代码既不适用。返回错误'必须声明标量变量“@variable”'
我不确定我缺少什么,因为我有一个可以实现类似功能的工作版本。但是,在这种情况下,上下文是不同的,此代码遵循原始代码
//Line that fixes it (added at this point) for anyone else that encounters the issue.
//MySqlConnection.connection = MyConnection;
System.Data.SqlClient.SqlDataAdapter Adapter = new System.Data.SqlClient.SqlDataAdapter(MySqlCommand.CommandText, conn.ConnectionString);
DataTable MyDataTable = new DataTable();
Adapter.Fill(MyDataTable);
在最后一行抛出错误Adapter.Fill(MyDataTable)
在添加参数值和 DataAdapters 之间我是否遗漏了一些愚蠢的事情,或者我不知道是否存在一些不兼容?
【问题讨论】:
-
如果
GetsMyId可以返回空值,那么您将收到此错误。您需要确保参数具有非空值。您可以在 C# 中使用DBNull.Value代替null在 SQL 中表示空值。 -
GetsMyId 被声明为私有 int 方法,据我所知它不能返回空值?
-
GetsMyId(this.Mycombobox.SelectedItem.ToString())究竟返回了什么?你调试过你的代码并看到了吗?你也想用..Add("@variable", SqlDbType.Int).Value..代替吗? -
还要确保 SQL 和参数之间的拼写相同,除非您真的确实将参数命名为
variable。 -
我正在使用
.Parameters.Add("@variable", SqlDbType.Int).Value更新的问题代码来匹配
标签: c# sql-server