2017-07-16 39 views
-2

否則查詢我得到了一個錯誤2X:如果與參數

本地或參數命名爲「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

[範圍](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沒有意識到[範圍]的概念(https://en.wikipedia.org/wiki/Scope_(computer_science))。 –

3

你所做錯了,是你在只有你ifscope(*)和您的else分支定義q。這意味着它不存在於它之外。

這應該工作:

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(); 

或者,你可以這樣做:

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

還是一路要簡明扼要,並獲得產品總數擺脫q

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

(*)謝謝@Uwe Keim提出鏈接!

+0

似乎OP沒有意識到[範圍]的概念(https://en.wikipedia.org/wiki/Scope_(computer_science))。最好放一個鏈接來解釋。 –

+0

我正在使用你的替代代碼,仍然沒有工作,沒有錯誤,但只有第二個語句正在工作中,WHERE名稱= @name – Hansmagz

+0

@Hansmagz然後你rcmdtext永遠不等於「ID」。也許它是「Id」或「id」?調試可能會有所幫助! – oerkelens