【发布时间】:2009-06-09 01:33:52
【问题描述】:
我有以下代码,它使用 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();
var contribId = cmdContrib.ExecuteScalar();
}
最初它可以工作,但现在 contribId 为空。从 Profiler 中提取后,我在 Management Studio 中测试了 SQL,它按预期返回了 ID。
接下来我添加了一个额外的命令来从不同的表(产品)中检索 ID。
productId 不为空,而 contribId 继续为空。
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();
}
我确信这是显而易见的事情,我会因为没有注意到它而自责,但现在我被难住了。
【问题讨论】:
-
您对 folderSystem.ContributorCode 的调试值是多少?
-
folderSystem.ContributorCode 包含什么值?我倾向于这是一种 SQL 注入类型的错误(例如,变量值中的单引号)。
-
使用静态 SQL 查询构造 cmdContrib,就像使用 cmdTest 一样,看看会发生什么。这个问题可能会突然出现在你身上。
-
folderSsystem.ContributorCodde 包含“PST”。
-
folderSystem.ContributorCode 的调试值为“PST”。尝试将其设为静态查询:“SELECT ContributorId FROM tblContributor WHERE Code='PST'”。仍然返回 null。
标签: c# sqlcommand