2011-07-25 24 views
10

Tengo el siguiente parámetro para SqlCommand. ¿Cómo puedo hacer para entrar y salir del valor de parámetro para el Procedimiento almacenado?Parámetro In-Out para SqlCommand

SqlCommand mySqlCommand = new SqlCommand("aspInsertZipCode", mySqlConnection); 
mySqlCommand.CommandType = CommandType.StoredProcedure; 
mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 

Respuesta

14
var pInOut = mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 
pInOut.Direction = ParameterDirection.InputOutput; 

Y después de leer el valor de salida después de haber ejecutado el comando:

// assumes that the parameter is a string and that it could possibly be null 
string value = Convert.IsDBNull(pInOut.Value) ? null : (string)pInOut.Value; 
+0

public SqlParameter Add (string parameterName, SqlDbType sqlDbType, int size). En base a esto, ¿cómo debo definir el tamaño para el tamaño? En el procedimiento almacenado, es VARCHAR (MAX) – Lijo

+2

@Lijo: Creo que [los ejemplos en MSDN usan -1] (http://msdn.microsoft.com/en-us/library/bb399384.aspx) para 'VARCHAR (MAX) 'etc. Así que sería algo así como' var pInOut = mySqlCommand.Parameters.Add ("@ DataRows", SqlDbType.VarChar, -1); pInOut.Direction = ParameterDirection.InputOutput; pInOut.Value = dataStringToProcess.ToString(); ' – LukeH

5

SqlParameter tiene una enumeración Direction. Establezca este valor

Luego use SqlCommand.Parameters.Add que toma SqlParameter.

dirección del parámetro:

http://msdn.microsoft.com/en-us/library/system.data.parameterdirection.aspx

A continuación, tire el valor después de haber llamado ExecuteNonQuery (por ejemplo), al recibir la Value a partir del parámetro de la colección de comandos:

myCommand.Parameters["@paramName"].Value

No recuerdo, pero creo que hay un indizador de cadenas en eso.

Alternativamente, no es este un trazador de líneas:

myCommand.Parameters.AddWithValue("@paramName", value).Direction = ParameterDirection.InputOutput;

+0

¿Debo usar mySqlCommand.Parameters [0]? ¿Alguna otra forma de definir la dirección al agregarla a la colección de parámetros en sí? – Lijo

+0

@Lijo He agregado un ejemplo de un comando de una línea que puede usar. Además, Add está en desuso en favor de AddWithValue, creo. –

+0

[AddWithValueis a menudo es una mala idea usar] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) y realmente no lo hago lo recomiendo, especialmente si está trabajando con una 'cadena'. 'AddWithValue' creará un parámetro' nvarchar', si está trabajando con una consulta directa y compara su parámetro 'nvarchar' con una columna' varchar' hará que la columna se lance de 'varchar' a' nvarchar', esto hará que los índices en esa columna no funcionen. –

0
SqlParameter DataRows = new SqlParameter("@DataRows", SqlDbType.Text) 
{ Value = dataStringToProcess.ToString(), Direction = ParameterDirection.InputOutput}; 
mySqlCommand.Parameters.Add(DataRows); 
2

Uno de los atributos de un comando SQL El parámetro es la Dirección. Desearía utilizar (saliéndose de la memoria)

SqlCommand mySqlCommand = new SqlCommand("aspInsertZipCode", mySqlConnection); 
mySqlCommand.CommandType = CommandType.StoredProcedure; 
mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 
mySqlCommand.Parameters("@DataRows").Direction = ParameterDirection.InputOutput; 
+1

Typo en la última línea. Los parámetros no son un método, es una colección. Por lo tanto, ese bloque debería ser ... 'SqlCommand mySqlCommand = new SqlCommand (" aspInsertZipCode ", mySqlConnection); mySqlCommand.CommandType = CommandType.StoredProcedure; mySqlCommand.Parameters.Add ("@ DataRows", dataStringToProcess.ToString()); mySqlCommand.Parameters ["@ DataRows"]. Dirección = ParameterDirection.InputOutput; ' –

Cuestiones relacionadas