[英]SqlCommand.ExecuteScalar returns null but raw SQL does not
我有以下使用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為null。 從Profiler提取后,我在Management Studio中測試了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命令是什么。
提取此命令,然后在同一數據庫中重新執行該命令,以確認它確實返回了值。 如果成功,則將您的執行上下文更改為Profiler認為連接正在其下運行的上下文,然后重試。 如果它現在失敗(返回0行),則檢查源表(參與者)是否實際上是實現行級安全性的View。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.