2012-03-06 167 views
5

Estoy tratando de llenar un GridView utilizando un método llamado PopulateGrid() (continuación), pero seguir recibiendo el mismo error del servidor "debe declarar el escalar variable '@QUALID'.ASP.NET C# Debe declarar la variable escalar

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

el GridView se declara como tal ..

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

Después de probar un sinnúmero de cosas y la pesca de arrastre a través de los foros que siempre vuelven a aparecer contra el mismo error.

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

¡Si alguien puede arrojar alguna luz sobre la situación, estaría muy agradecido!

+0

Gracias por todas las respuestas, el consenso general parece ser yo' Me falta el @ en mi param sql pero lo he intentado y se está lanzando el mismo error. También tengo la misma sintaxis exacta que originalmente publicada para mis listas desplegables que funcionan bien. – PatrickJames

Respuesta

3

Este:

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

debe ser la siguiente:

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

Lo sentimos, mecanografiado demasiado rápido, intente:

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

OK, tienes un problema un poco más fundamental en tu código. Usted crea un objeto de comando, pero luego pasa la cadena SQL y la conexión para el comando a su dataadapter, donde ejecutará su cadena sql sin parámetros en su conexión.

No he usado demasiados datadapters, pero creo que debe establecer los parámetros en el comando de selección de su adaptador.

+0

Gracias por la respuesta rápida, pero el mismo error se produce después de cambiar a la anterior. – PatrickJames

+0

mismo error otra vez! Creo que estas son todas las opciones válidas que me llevan a pensar que se está causando en otro lugar. ¡Ojalá supiera dónde! – PatrickJames

1

Trate de añadir la @ a su parámetro de SQL como tal

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

Te estas perdiendo la "@" donde se agrega el parámetro:

SqlParameter("@QUALID", val) 
1

cambio

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

a ya sea

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

o

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

y usted debe ser bueno para ir. Su problema es que se echa en falta una '@' en el nombre de 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 va a trabajar ... (da.selectcommand = cmd;)

+0

Es posible que desee agregar por qué esto funciona en lugar de simplemente pegar un trozo de código ... – Sinkingpoint

+0

Esto es de hecho una posible solución, voy a necro esto solo para explicarlo en breve. El OP tenía un objeto SqlCommand pero nunca lo usó. Una solución aún más fácil es 'new SqlDataAdapter (cmd)' inicializando el adaptador usando el objeto de comando de selección en lugar de la cadena de "sql". PD: el uso de nombres de variables de tres letras tampoco es agradable, prueba objCommand & strSql y duplica la legibilidad (en mi opinión) –

Cuestiones relacionadas