我想在我的数据库表Orders
中打印PrintTime
字段值为NULL
class Printing
{
public static void check()
{
SqlConnection con = getConnectionString();
string query = "SELECT * FROM Orders WHERE PrintTime = @printTimeValue";
SqlCommand command = new SqlCommand(query, con);
command.Parameters.AddWithValue("@printTimeValue", DBNull.Value);
DataTable results = new DataTable();
using (con)
using (command)
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
dataAdapter.Fill(results);
for (int i = 0; i < results.Rows.Count; i++)
{
Console.WriteLine(results.Rows[i]["ID"].ToString());
Console.WriteLine("---------------");
}
}
private static SqlConnection getConnectionString()
{
string vmpstring =
ConfigurationManager.ConnectionStrings["chinese"].ConnectionString;
SqlConnection vmpsqlcon = new SqlConnection(vmpstring);
return vmpsqlcon;
}
}
我称之为:
Printing.check();
如您所见,有一个打印声明,
Console.WriteLine(results.Rows[i]["ID"].ToString());
但是我没有在控制台中打印任何内容,但我可以看到数据库中的行,其中PrintTime
列为NULL
列的数据为{{1}}
我做错了什么?
答案 0 :(得分:4)
null
不是一个值,而是一个标记,指出rdbms不知道该字段中的值;您无法使用'='检查null
,因为等于运算符是值。
在你的sql中,你必须使用WHERE PrintTime is null
检查null。
请注意,如果将c#DBNull.Value
替换为实际值,则“is”运算符将无效。
可以处理null和值的可能解决方法:
SELECT *
FROM Orders
WHERE PrintTime = @printTimeValue
or (
@printTimeValue is null
and PrintTime is null
)