簡體   English   中英

SqlCommand.ExecuteScalar返回null,但原始SQL不返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM