2012-03-06 16 views
5

próbuję wypełnić GridView przy użyciu metody zwanej PopulateGrid() (poniżej), ale wciąż otrzymuję ten sam błąd serwera „Musi zadeklarować zmienną skalarną«@QUALID».ASP.NET C# musi zadeklarować zmienną skalarną

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 jest zadeklarowana jak tak ..

<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> 

Po wypróbowaniu niezliczone rzeczy i trałowania poprzez fora ja tam się wobec tego samego błędu.

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

Jeśli ktokolwiek może rzucić jakiekolwiek światło na tę sytuację, byłbym naprawdę wdzięczny!

+0

Dzięki za wszystkie odpowiedzi, ogólny konsensus wydaje się być ja” m brakuje @ w moim parametrze sql, ale próbowałem i ten sam błąd jest zgłaszany. Mam również dokładnie taką samą składnię jak pierwotnie opublikowana dla moich list rozwijanych, które działają poprawnie. – PatrickJames

Odpowiedz

3

to:

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

powinno być tak:

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

Niestety, wpisane zbyt szybkie, spróbuj:

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

OK, masz nieco bardziej podstawowy problem w swoim kodzie. Tworzysz obiekt polecenia, ale potem przekazujesz ciąg SQL i połączenie dla polecenia do swojego adaptera danych, gdzie będzie on wykonywał twój ciąg sql bez parametrów przy jego połączeniu.

Za dużo nie używałem Dataadapterów, ale myślę, że trzeba ustawić parametry w poleceniu select twojego adaptera.

+0

Dziękujemy za szybką odpowiedź, ale ten sam błąd zgłoszony po zmianie na powyższy. – PatrickJames

+0

sam błąd ponownie! Myślę, że są to wszystkie ważne opcje, które prowadzą mnie do myślenia, że ​​to jest spowodowane gdzie indziej. Chciałbym wiedzieć gdzie! – PatrickJames

1

spróbuj dodać @ do sql param jak tak

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

brakuje na "@", gdzie należy dodać parametr:

SqlParameter("@QUALID", val) 
1

zmianę

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

do albo

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

lub

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

i powinno być dobrze iść. Twój problem jest to, że brakuje „@” w nazwie paramter

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

użytku dis jeden będzie działać ... (da.selectcommand = cmd;)

+0

Może chcesz dodać, dlaczego to działa, a nie tylko wklejać fragment kodu ... – Sinkingpoint

+0

To jest rzeczywiście możliwe rozwiązanie, zamierzam nekro to tylko wyjaśnić w skrócie. OP miał obiekt SqlCommand, ale nigdy go nie używał. Jeszcze łatwiejszą poprawką jest 'new SqlDataAdapter (cmd)' inicjalizujący adapter przy użyciu obiektu selectcommand zamiast łańcucha "sql". PS: używanie nazw zmiennych o trzech literach również nie jest miłe, spróbuj objCommand & strSql i podwojmy czytelność (według mnie) –

Powiązane problemy