C# 值设置正确,但使用时为空

C# 值设置正确,但使用时为空,c#,sql,variables,null,C#,Sql,Variables,Null,好的,我已经能够从一个类Login中检索到一个值,并且能够将它存储在另一个类Main中的公共变量userID中。我知道该值已正确设置,因为它正在我的应用程序的主窗口上填充一个标签,该应用程序使用main作为其类。该值还用于每秒轮询一个数据库,但是,这仅在使用未经修改的SQL查询时有效。如果我尝试使用参数化查询,我会发现查询将值视为null时出现问题 此查询有效,但不正确: SqlCommand cmd_getMessage = new SqlCommand("SELECT message, se

好的,我已经能够从一个类Login中检索到一个值,并且能够将它存储在另一个类Main中的公共变量userID中。我知道该值已正确设置,因为它正在我的应用程序的主窗口上填充一个标签,该应用程序使用main作为其类。该值还用于每秒轮询一个数据库,但是,这仅在使用未经修改的SQL查询时有效。如果我尝试使用参数化查询,我会发现查询将值视为null时出现问题

此查询有效,但不正确:

SqlCommand cmd_getMessage = new SqlCommand("SELECT message, sender_ID, date_time FROM Message WHERE recipient_ID='" + userID + "'", SQL);
然而,这并不是:

SqlCommand cmd_getMessage = new SqlCommand("SELECT message, sender_id, date_time FROM Message WHERE recipient_id=@recipient_id", SQL);
cmd_getMessage.Parameters.AddWithValue("@recipient_id", userID);
值得注意的是,这些查询与公共变量位于同一个类中。如果我尝试从另一个类访问该变量,然后在SQL查询中使用它,那么即使是非参数化查询也无法工作


希望这是足够的信息供您使用。谢谢您的时间。

我猜用户ID在某一点上是空的

尝试将参数行更改为:

cmd_getMessage.Parameters.AddWithValue("@recipient_id", userID ?? "");

看看你是否仍然得到错误。这将使两个查询的性能相同。

我猜某个点上的userID是空的

尝试将参数行更改为:

cmd_getMessage.Parameters.AddWithValue("@recipient_id", userID ?? "");

看看你是否仍然得到错误。这将使两个查询的执行效果相同。

什么类型是
recipient\u id
userID
?@Guvante
userID
是一个字符串,
recipient\u id
是nvarchar哪些类型是
recipient\u id
userID
?@Guvante
userID
是一个字符串,
recipient\u id
是nvarcharGood>字符串连接捕获将
null
视为空字符串。只需找到
userID
为null的位置。字符串连接捕获良好,将
null
视为空字符串。只需找到
userID
为null的位置。