2012-03-06 111 views
5

我試圖填充使用一種叫做PopulateGrid(法)一個GridView(下同),但繼續得到同樣的服務器錯誤的標量變量「必須聲明標量變量‘@QUALID’。ASP.NET C#必須聲明

public void PopulateGrid() 
    { 
     String val = TextBox2.Text; 

     String sql = "SELECT QLEVELNAME FROM Qual_Levels WHERE [email protected]"; 
     SqlCommand cmd = new SqlCommand(sql, 
      new SqlConnection(ConfigurationManager.ConnectionStrings["RecruitmentDBConnString"].ConnectionString)); 

     cmd.Parameters.Add(new SqlParameter("QUALID", val)); 

     cmd.Connection.Open(); 


     SqlDataAdapter da = new SqlDataAdapter(sql, cmd.Connection); 

     DataSet ds = new DataSet(); 
     da.Fill(ds, "Qual_Levels"); 


     SelectionGrid.DataSource = ds; 
     SelectionGrid.DataBind(); 


     ds.Dispose(); 
     da.Dispose(); 
     cmd.Connection.Close(); 
     cmd.Connection.Dispose(); 
    } 

GridView控件被宣佈像這樣..

<asp:GridView ID="SelectionGrid" 
      autogeneratecolumns="False" 
      runat="server" CellPadding="4" 
      ForeColor="#333333" GridLines="None" DataKeyNames="QUALID"> 

      <Columns> 
       <asp:BoundField DataField="QLEVELNAME" HeaderText="Level Name" 
        ReadOnly="True" SortExpression="name" /> 
      </Columns> 
</asp:GridView> 

嘗試了無數的東西,通過我一直來面對同樣的錯誤論壇拖網後。

Server Error in '/' Application.

Must declare the scalar variable "@QUALID".

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Must declare the scalar variable "@QUALID".

Source Error:

Line 282: DataSet ds = new DataSet();

Line 283: da.Fill(ds, "Qual_Levels");

如果任何人都可以擺脫這種情況,我會非常感激!

+0

感謝所有的答覆,一般的共識似乎是我」在我的SQL參數中錯過了@但嘗試過了,並且拋出了相同的錯誤。此外,我擁有完全相同的語法,最初發布爲我的下拉列表工作正常。 – PatrickJames 2012-03-06 14:48:14

回答

3

此:

cmd.Parameters.Add(new SqlParameter("QUALID", val)); 

應該是這樣的:

cmd.Parameters.Add(new SqlParameter("@QUALID", val)); 

對不起,打字太快,嘗試:

cmd.Parameters.AddWithValue("@QUALID", val); 

OK,你的代碼中有一個更基本的問題。你創建一個命令對象,然後你將SQL字符串和該命令的連接傳遞到你的dataadapter中,在那裏它將執行你的sql字符串,而在它的連接上沒有任何參數。

我還沒有使用過多的dataadapters,但我認爲你需要在你的適配器的select命令上設置參數。

+0

感謝您的快速響應,但在更改上述內容後發生同樣的錯誤。 – PatrickJames 2012-03-06 14:35:29

+0

再次出現同樣的錯誤!我認爲這些都是有效的選擇,導致我認爲它是在其他地方引起的。希望我知道在哪裏! – PatrickJames 2012-03-06 14:59:58

1

嘗試添加@到SQL PARAM像這樣

cmd.Parameters.Add(new SqlParameter("@QUALID", val)); 
1

你缺少了 「@」,您添加參數:

SqlParameter("@QUALID", val) 
1

變化

cmd.Parameters.Add(new SqlParameter("QUALID", val)); 

到要麼

cmd.Parameters.Add(new SqlParameter("@QUALID", val)); 

cmd.Parameters.Add("@QUALID", SqlDbType.WhatFitsYourDB).Value = val; 

,你應該是好去。你的問題是,你缺少的放慢參數名稱

1
String val = TextBox2.Text; 

String sql = "SELECT QLEVELNAME FROM Qual_Levels WHERE [email protected]"; 
SqlCommand cmd = new SqlCommand(sql, new SqlConnection(ConfigurationManager.ConnectionStrings["RecruitmentDBConnString"].ConnectionString)); 
SqlDataAdapter da = new SqlDataAdapter(sql, cmd.Connection); 
DataSet ds = new DataSet(); 
cmd.Parameters.Add(new SqlParameter("@QUALID", val)); 

da.SelectCommand = cmd; 
cmd.Connection.Open(); 

da.Fill(ds, "Qual_Levels"); 


SelectionGrid.DataSource = ds; 
SelectionGrid.DataBind(); 

ds.Dispose(); 
da.Dispose(); 
cmd.Connection.Close(); 
cmd.Connection.Dispose(); 

使用DIS一個將工作「@」 ......(da.selectcommand = cmd;

+0

你可能想要添加爲什麼這個工作,而不是隻粘貼一大塊代碼... – Sinkingpoint 2013-09-29 08:00:14

+0

這確實是一個可能的解決方案,我將necro這只是爲了解釋簡而言之。 OP有一個SqlCommand對象,但從未使用它。更簡單的解決方法是使用selectcommand對象而不是「sql」字符串來初始化適配器的「新SqlDataAdapter(cmd)」。 PS:使用三個字母的變量名稱也不好,請嘗試objCommand&strSql並加倍可讀性(在我看來) – 2015-09-15 15:13:51