2016-06-18 6 views
1

犯罪データベースでNIC番号を調べることで、過去の犯罪歴があるかどうかを確認しようとしています。ただし、例外はなく、関連するデータはデータベースに存在しますが、データ・リーダーは空ですが、問合せはデータをフェッチしません。asp.netで結果を返さないSQL Serverクエリ

次のコードを参照してください:デバッグ中

SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn); 
string nic = "null"; 

foreach (var person in allInvolved) 
{ 
    conn.Open(); 
    nic = person.NIC; 

    dr3 = cmd5.ExecuteReader(); 

    if (dr3.HasRows) 
    { do something } 
    else if (!dr3.HasRows) 
    { do something else} 
} 

変数NICはそれで正しい値を持って、私はそれをチェックします。どこが間違っているのか分かりません。コードに関するその他の情報が必要な場合は、お尋ねください。

ありがとうございます。

+1

'ExecuteReader'行の後に' dr3'を 'read'する必要があります。 – muratgu

+0

あなたはnicを文字列として定義します。実際には文字列の値か、問題のように説明していますか?英数字の場合は、SQLで引用符で囲む必要があります。申し訳ありません - それは私が目立つものです。 – dbmitch

+0

あなたは 'if(dr3.Read())'のような意味ですか?はいの場合、私はそれを試して、それが動作していません。 @muratgu –

答えて

2

あなたは:

SqlCommand cmd5 = new SqlCommand("select * from criminal where NIC ="+nic, conn); 

nicの電流値は、その瞬間でを使用しています。

nic = person.NIC; 
dr3 = cmd5.ExecuteReader(); 

ので、その値がを使用していない:あなたがnicその後に変更するかは重要ではありません。理想的には、パラメータ化する必要があります

SqlCommand cmd5 = new SqlCommand(
    "select * from criminal where NIC = @nic", conn); 
var param = cmd5.Paramters.Add("nic", SqlDbType.SomethingRelevant); 
// ^^^ note: I don't know what the data type is, you'll need to pick that 

foreach(...) { 
    param.Value = ((object)person.NIC) ?? DBNull.Value; 
    using(var dr3 = cmd5.ExecuteReader()) { 
     // ... 
    } 
} 
... 

また、これらのオブジェクトの多くはIDisposableであり、usingブロックでなければならないことに注意してください。代わりに、 "dapper"のようなツールを見てください。

var criminals = conn.Query<Criminal>(
    "select * from criminal where NIC = @nic", 
    new { nic = person.NIC}).AsList(); 
+0

あなたの返事をありがとう。私はデバッグし、クエリで 'nic'を介してカーソルを取るとき、それは持っている必要がある正しいニックを示していますその時の質問。あなたは@ Marc-Gravellと同じ問題をまだ考えていますか? –

+0

@syedはい、基本的に –

+0

私はこの解決策を実装し、 'executereader'行のception '変数名 '@nic'は既に宣言されています。変数名はクエリバッチまたはストアドプロシージャ内で一意でなければなりません。 " –

1

)(この

SqlConnection con = new SqlConnection(connectionString); 
SqlCommand cmd = new SqlCommand(); 
cmd.Connection = con; 
con.Open(); 

foreach (var person in allInvolved) 
{ 
nic = person.NIC; 
cmd.CommandText = "select * from criminal where NIC ="+nic; 
dr3 = cmd.ExecuteReader(); 

while (dr3.Read()) 
{ 
     if (dr3.HasRows) 
     { do something} 
     else if (!dr3.HasRows) 
     { do something else} 
} 

} con.Closeを試します。

+0

まだ同じ:( –

+0

ちょっとデバッグしてください。dbにデータがありますか?@SyedHarisAliGhaznavi – NEER

+0

はい、NICの変数に値が入っていて、それをコピーしてSQLスタジオに貼り付けて実行しましたクエリとそれは望みの結果を与えましたが、ASP.NETで同じパラメータを使用すると、datareaderは空です@NeerPriv –

関連する問題