2017-07-16 10 views
-2

とそうでないクエリは、私は、エラーの2倍を得た場合:その名は、ローカルまたはパラメータを定義するために囲むローカルスコープで使用されているため、「Q」という名前パラメータ

ローカルまたはパラメータは、このスコープ内で宣言することはできません

私はここで間違っていますか?私は私のビューにドロップダウンリストを持って、私はこれは私のコードである

@dropdowncategoryパラメータに値を渡す:

cmd.Connection = con; 
string dropdownsearch = "@dropdowncategory"; 
string q; 
if (dropdownsearch == "ID") 
{ 
    string q = "SELECT * FROM accounts WHERE id = @id"; 
} 
else 
{ 
    string q = "SELECT * FROM accounts WHERE name = @name"; 
} 

cmd.Parameters.AddRange(queryParams.ToArray()); 
cmd.CommandText = q; 
con.Open(); 
+1

'if'の前に' string q'を宣言する –

+0

[Scope](https://en.wikipedia.org/wiki/Scope_(computer_science))FTW! –

+0

私のコードを更新しました。別のエラーがありました。 – Hansmagz

答えて

1

qの範囲は括弧(if/else)の範囲内です。コードを外側に宣言すると、コードがコンパイルされます。あなたは間違って何をしている

cmd.Connection = con; 
string dropdownsearch = "@dropdowncategory"; 
string q; 
if (dropdownsearch == "ID") 
{ 
    q = "SELECT * FROM accounts WHERE id = @id"; 
} 
else 
{ 
    q = "SELECT * FROM accounts WHERE name = @name"; 
} 

cmd.Parameters.AddRange(queryParams.ToArray()); 
cmd.CommandText = q; 
con.Open(); 
+0

OPは[scope](https://en.wikipedia.org/wiki/Scope_(computer_science))の概念を認識していないようです。 –

3

は、あなたが、あなたのifとあなたのelseブランチのscopeq(*)を定義しているということです。それはそれがその外側に存在しないことを意味します。

これは動作するはずです:

string q = dropdownsearch == "ID" 
    ? "SELECT * FROM accounts WHERE id = @id" 
    : "SELECT * FROM accounts WHERE name = @name"; 
cmd.CommandText = q; 

あるいは簡潔で、かつalltogether qを取り除くためにすべての道を行く:

cmd.CommandText = dropdownsearch == "ID" 
    ? "SELECT * FROM accounts WHERE id = @id" 
    : "SELECT * FROM accounts WHERE name = @name"; 

string q; 
if (dropdownsearch == "ID") 
{ 
    q = "SELECT * FROM accounts WHERE id = @id"; 
} 
else 
{ 
    q = "SELECT * FROM accounts WHERE name = @name"; 
} 

cmd.Parameters.AddRange(queryParams.ToArray()); 
cmd.CommandText = q; 
con.Open(); 

を別の方法として、あなたのような何かを行うことができます

(*)リンクをご提案いただきありがとうございました!

+0

OPが[scope](https://en.wikipedia.org/wiki/Scope_(computer_science))の概念を認識していないようです。より良い説明をするためのリンクを置く。 –

+0

代替コードを使用していますが、まだ動作していません。エラーはありませんが、2番目のステートメントだけが動作しています。WHERE name = @name – Hansmagz

+0

@Hansmagz rcmdtextは決して "ID"と等しくありません。たぶんそれは "Id"か "id"ですか?デバッグが役に立ちます! – oerkelens