tiene que proporcionado procedimiento parámetros new han ejemplos ejemplo consulta conn con argumentos c# .net sql ado.net

c# - proporcionado - SQL Query dice que un parámetro no se proporciona, pero se agrega al objeto SqlCommand



sqlconnection conn new sqlconnection (4)

De forma predeterminada, la propiedad CommandText necesita contener un comando SQL completo, no solo el nombre del procedimiento almacenado.

Puede cambiar esto para establecer la propiedad CommandType SqlCommand en CommandType .

Alternativamente, puede pasar explícitamente los parámetros, cambiando CommandText a "someStoredProcedure @UserName, @ProductCode" ; esta es una declaración SQL completa y funcionará con el CommandType of Text predeterminado.

EDITAR : Acabo de CommandType , y la única forma de obtener ese mensaje de error sin configurar CommandType en CommandType (que no hizo) es si CommandText es EXEC someStoredProcedure . Pasar un parámetro null da un error diferente.

Tengo un procedimiento almacenado que tiene un parámetro llamado UserName y en mi código subyace un objeto SqlCommand al que agrego los parámetros con el método Add. Pero por algún motivo, cuando el objeto de comando intenta ejecutar el método ExecuteReader, arroja una excepción. Estoy totalmente perdido y no tengo idea de por qué no reconoce el parámetro. Antes de que se ejecute el método ExecuteReader, tengo un punto de ruptura establecido para poder confirmar que el objeto del comando contiene los parámetros que se están configurando, lo cual es cierto. Sé que el procedimiento almacenado devuelve los datos correctos cuando los parámetros no se agregan al objeto de comando, pero están codificados en el procedimiento almacenado real. A continuación se muestra el mensaje de excepción que se proporciona en el bloque catch. También pegaré mi código y la primera parte del procedimiento almacenado. Agradecería enormemente cualquier ayuda en este tema, ya que he intentado muchos enfoques diferentes en vano. Gracias por adelantado.



Mensaje de excepción

El procedimiento o función ''someStoredProcedure'' espera el parámetro ''@UserName'', que no se suministró.



Código detrás

private DataTable GetLossMitData(string code, DateTime? start, DateTime? end) { DataTable results = new DataTable(); string connectionString = ConfigurationManager.ConnectionStrings["asdf"].ConnectionString; string userName = String.Empty; try { using (SPSite site = new SPSite(ConfigurationManager.AppSettings["someName"])) { using (SPWeb web = site.OpenWeb()) { userName = web.CurrentUser.Email.ToString(); } } using (SqlConnection connection1 = new SqlConnection(connectionString)) { connection1.Open(); using (SqlCommand command1 = new SqlCommand("someStoredProcedure", connection1)) { command1.Parameters.Add(new SqlParameter("@UserName", userName)); command1.Parameters.Add(new SqlParameter("@ProductCode", code)); SqlDataReader dr = command1.ExecuteReader(CommandBehavior.CloseConnection); results.Load(dr); } connection1.Close(); } } catch (Exception ex) { } return results; }



Procedimiento almacenado

@UserName nvarchar(256), @ProductCode nvarchar(256), @StartDate nvarchar(256) = ''1/1/1900'', @EndDate nvarchar(256) = ''12/30/2012'' AS BEGIN SET NOCOUNT ON; Declare @UserID int Select @UserID = Users.UserID from Users where Users.Email = @UserName


Intente asegurarse de que el tipo de comando esté configurado en el procedimiento almacenado.

mycommand.CommandType = System.Data.CommandType.StoredProcedure;


Obtendrá esta excepción si el valor de su variable ''userName'' es nulo

Si null es válido, pase ''DBNull.Value'' a la base de datos en su lugar:

command1.Parameters.Add(new SqlParameter("@UserName", (userName ?? DBNull.Value));


Command1.CommandType = System.Data.CommandType.StoredProcedure

Esto obligará al ExecuteReader a realizar el comando en lugar de simplemente intentarlo como un comando plano.