C# SqlCommand.ExecuteScalar返回null,但原始SQL不返回
下面的代码使用SqlClient.ExecuteScalar方法从表返回IDC# SqlCommand.ExecuteScalar返回null,但原始SQL不返回,c#,sqlcommand,C#,Sqlcommand,下面的代码使用SqlClient.ExecuteScalar方法从表返回ID using (var conn = new SqlConnection(connectionString)) using (var cmdContrib = new SqlCommand("SELECT ContributorId FROM Contributor WHERE Code='" + folderSystem.ContributorCode + "'", conn)) { conn.Open();
using (var conn = new SqlConnection(connectionString))
using (var cmdContrib = new SqlCommand("SELECT ContributorId FROM Contributor WHERE Code='" + folderSystem.ContributorCode + "'", conn))
{
conn.Open();
var contribId = cmdContrib.ExecuteScalar();
}
最初它是工作的,但现在contribId是空的。从探查器中提取后,我在ManagementStudio中测试了SQL,它按预期返回了ID
接下来,我添加了一个额外的命令,用于从不同的表(产品)中检索ID。productId不为null,而contribId继续为null
using (var conn = new SqlConnection(connectionString))
using (var cmdContrib = new SqlCommand("SELECT ContributorId FROM Contributor WHERE Code='" + folderSystem.ContributorCode + "'", conn))
using (var cmdTest = new SqlCommand("SELECT productId FROM Product WHERE [filename] = 'bda00001.jpg'", conn))
{
conn.Open();
var contribId = cmdContrib.ExecuteScalar();
var productId = cmdTest.ExecuteScalar();
}
我确信这是显而易见的事情,我会因为没有注意到而责备自己,但现在我很困惑。使用探查器确认: A) 返回了多少行(我怀疑是0) B) 它在哪个数据库中 C) 它的登录/用户上下文是什么。 D) 实际的整个SQL命令是什么
提取此命令并在同一数据库中重新执行,以确认它是否返回值。如果成功,则将您的执行上下文更改为探查器所说的连接正在运行的上下文,然后重试。如果现在失败(返回0行),则检查源表(Contributor)是否实际上是实现行级安全性的视图。使用探查器确认: A) 返回了多少行(我怀疑是0) B) 它在哪个数据库中 C) 它的登录/用户上下文是什么。 D) 实际的整个SQL命令是什么
提取此命令并在同一数据库中重新执行,以确认它是否返回值。如果成功,则将您的执行上下文更改为探查器所说的连接正在运行的上下文,然后重试。如果现在失败(返回0行),则检查源表(Contributor)是否实际上是一个实现行级安全性的视图。folderSystem.ContributorCode的调试值是多少?folderSystem.ContributorCode包含哪些值?我倾向于使用SQL注入类错误(例如变量值中的单引号)。使用静态SQL查询构造cmdContrib,就像使用cmdTest一样,然后看看会发生什么。问题可能会突然出现。folderSsystem.ContributorCode包含“PST”。folderSystem.ContributorCode的调试值为“PST”。尝试将其设置为静态查询:“从tblContributor WHERE Code='PST'中选择ContributorId”。仍然返回null。folderSystem.ContributorCode的调试值是多少?folderSystem.ContributorCode包含哪些值?我倾向于使用SQL注入类错误(例如变量值中的单引号)。使用静态SQL查询构造cmdContrib,就像使用cmdTest一样,然后看看会发生什么。问题可能会突然出现。folderSsystem.ContributorCode包含“PST”。folderSystem.ContributorCode的调试值为“PST”。尝试将其设置为静态查询:“从tblContributor WHERE Code='PST'中选择ContributorId”。仍然返回null。“C)它的登录/用户上下文是什么”+1,很容易应用程序运行在不同的上下文它是不同的数据库(令人尴尬),尽管这个答案可以作为这类问题的检查表。别担心,这迟早会发生在我们所有人身上。“C)它的登录/用户上下文是什么”+1,很容易,应用程序运行在不同的环境中。这是一个不同的数据库(令人尴尬),尽管这个答案可以作为这类问题的检查表。别担心,这迟早会发生在我们所有人身上。