2012-03-06 20 views
5

Sto cercando di compilare un GridView utilizzando un metodo chiamato PopulateGrid() (qui di seguito), ma continuo a ricevere lo stesso errore del server "Deve dichiarare la variabile SCALARE '@QUALID'.ASP.NET C# Deve dichiarare la variabile scalare

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

il GridView è dichiarata in questo modo ..

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

Dopo aver provato innumerevoli cose e pesca a strascico attraverso i forum di continuo a contro lo stesso errore.

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

Se qualcuno può far luce sulla situazione ne sarei davvero grato!

+0

Grazie per tutte le risposte, il consenso generale sembra essere I' m mi manca @ nel mio parametro sql ma ho provato e lo stesso errore è stato lanciato. Inoltre ho la stessa sintassi esattamente come originariamente pubblicato per i miei elenchi a discesa che funzionano bene. – PatrickJames

risposta

3

questo:

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

dovrebbe essere questo:

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

Siamo spiacenti, digitato troppo veloce, provare:

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

OK, hai un problema leggermente più fondamentale nel tuo codice. Si crea un oggetto comando, ma poi si passa la stringa SQL e la connessione per il comando nel proprio dataadapter, dove eseguirà la stringa sql senza parametri sulla sua connessione.

Non ho usato troppo i dataadapter, ma penso che sia necessario impostare i parametri sul comando select dell'adattatore.

+0

Grazie per la risposta rapida ma lo stesso errore lanciato dopo aver modificato la precedente. – PatrickJames

+0

stesso errore di nuovo! Penso che queste siano tutte opzioni valide che mi portano a pensare che sia stato causato da qualche altra parte. Vorrei sapere dove! – PatrickJames

1

Provate ad aggiungere la @ per il vostro param sql in questo modo

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

Ti manca la "@" in cui si aggiunge il parametro:

SqlParameter("@QUALID", val) 
1

cambiamento

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

a o

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

o

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

e si dovrebbe essere pronti per partire. Il tuo problema è che ti manca un '@' in nome Parametro

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

uso dis uno che funzionerà ... (da.selectcommand = cmd;)

+0

Potresti voler aggiungere il motivo per cui funziona piuttosto che incollare semplicemente un pezzo di codice ... – Sinkingpoint

+0

Questa è davvero una soluzione possibile, lo anniderò solo per spiegare in breve. L'OP aveva un oggetto SqlCommand ma non lo utilizzava mai. Una soluzione ancora più semplice è 'new SqlDataAdapter (cmd)' inizializzando l'adattatore usando l'oggetto selectcommand invece della stringa "sql". PS: neanche usare i nomi delle variabili a tre lettere, prova objCommand & strSql e raddoppia la leggibilità (secondo me) –

Problemi correlati