Bas*_*yon 2 c# sql-server dbnull sqlparameter
在有人评论之前已经在其他问题上回答过这个问题之前,我知道这一点......但是尽管我已经回顾了这些答案
甚至我自己的问题
我无法让我的查询返回带有null参数的值
我已经尝试简化我的代码,因此可以在这里看到.
我也试过这个
int? i = null;
SqlConnection connection = new SqlConnection(Properties.Settings.Default.connstring.ToString());
SqlCommand cmd = new SqlCommand();
cmd.Connection = connection;
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk";
cmd.Parameters.AddWithValue("@parent_pk", i ?? Convert.DBNull);
cmd.Connection.Open();
var dataReader = cmd.ExecuteReader();
var dataTable = new DataTable();
dataTable.Load(dataReader);
cmd.Connection.Close();
Run Code Online (Sandbox Code Playgroud)
我尝试过这方面的变化
cmd.Parameters.AddWithValue("@parent_pk", DBNull.Value);
Run Code Online (Sandbox Code Playgroud)
我尝试过使用该查询
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk or @parent_pk Is Null";
Run Code Online (Sandbox Code Playgroud)
我尝试将参数明确声明为可为空
cmd.Parameters.AddWithValue("@parent_pk", i ?? Convert.DBNull).IsNullable = true;
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我认为我有工作,因此我接受我所做的答案的原因,但我错了,无论价值多少,只会把一切都归还给我.
我知道命令对象正在连接并返回数据,因为如果我输入一个有效值(比如说27)它会返回记录...我也知道有Null作为值的记录......但无论我如何尝试设置它当我尝试传递空值作为参数时,我一直得不到任何回报.
任何能帮助我弄清楚我在做错的人都会感激不尽.
由于我的评论解决方案有效 - 将在此处发布.基本上已经描述的问题(甚至在前一个问题中已经回答过)是你需要使用IS NULL来比较sql中的null值.既然你可以有两种情况(你的参数是否为空) - 你必须测试这两种情况:
where parent_pk = @parent_pk or (@parent_pk IS NULL and parent_pk IS NULL)
Run Code Online (Sandbox Code Playgroud)
小智 5
问题在于您选择的 SQL 查询:
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk";
如果 @parent_pk 的值为 NULL,它将不会返回任何内容,因为即使 SQL Server 中的parent_pk 为 null,也会NULL = NULL返回 false。NULL is NULL返回真。
cmd.CommandText = "Select * from view_nests where parent_pk = @parent_pk or @parent_pk Is Null";
Run Code Online (Sandbox Code Playgroud)
此查询返回所有内容,因为如果您传递 NULL for @parent_pk,则该子句@parent_pk is NULL将评估 true,因为@parent_pk评估的每行不会更改。
要完成您想要做的事情,您需要执行以下操作:
string nullCommandText = "Select * from view_nests where parent_pk IS @parent_pk";
string commandText = "Select * from view_nests where parent_pk = @parent_pk";
cmd.CommandText = i == null? nullCommandText : commandText;
cmd.Parameters.AddWithValue("@parent_pk", i ?? Convert.DBNull);
Run Code Online (Sandbox Code Playgroud)
另外两条评论:
*,列出您想要的列。| 归档时间: |
|
| 查看次数: |
8987 次 |
| 最近记录: |