です。SqlClient.ExecuteScalarメソッドを使用してテーブルからIDを返す次のコードがあります。SqlCommand.ExecuteScalarはnullを返しますが、未処理のSQLは
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から抽出した後、管理スタジオでSQLをテストし、期待どおりにIDを返しました。
次のコマンドを追加して、別のテーブル(製品)からIDを取得しました。
contribIdがnullのままである間、productIdは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();
}
私はそれが明らかなものであると私はそれに気付いていないために自分を蹴るだろう確信しているが、今の私は困惑。使用プロファイラは確認する
folderSystem.ContributorCodeのデバッグ値は何ですか? –
folderSystem.ContributorCodeにはどのような値が含まれていますか?私はこれがSQLインジェクションのバグ(例えば、変数の値の一重引用符)であることに賛成しています。 –
cmdTestと同様に、静的SQLクエリを使用してcmdContribを作成し、何が起こるかを確認します。問題があなたに飛び火するかもしれません。 –