2010-10-03 13 views
5

no entiendo claramente cómo formatear el SqlDataAdapter para las variables de salida cuando se trabaja con C#SqlDataAdapter salida Cuestión variable C#

mensaje de error:

índice (basado en cero) debe ser mayor que o igual a cero y menos que el tamaño de la lista de argumentos.

Código Ejemplo (procedimiento almacenado funciona bien)

 private DataTable updateOrdEodHold(DataTable tb, out string mnpft, out string authld, out string trd, out string hld, out string extnow) 
    { 
     // start the connection string 
     string connstr = ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString; 
     SqlConnection myConn = new SqlConnection(connstr); 
     // declare Symbol and assign for Errors Catch Exception 
     string Symbol = ""; 
     string sqlComm = "dbo.UpdateOrdEodHold"; 
     DataTable HoldVals = new DataTable(); 
     SqlDataAdapter dataAdp = new SqlDataAdapter(sqlComm, myConn); 
     dataAdp.SelectCommand.CommandType = CommandType.StoredProcedure; 
     string ticker = (string)Convert.ToString(tb.Rows[0]["Ticker"]); 
     // update Symbol for Catch ex 
     Symbol = ticker.ToString(); 
     String company = (string)Convert.ToString(tb.Rows[0]["Company"]); 
     String avgprofit = (string)Convert.ToString(tb.Rows[0]["AvgProfit"]); 
     String extdte = (string)Convert.ToString(tb.Rows[0]["ExitDate"]); 
     dataAdp.SelectCommand.Parameters.Clear(); 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@ticker", SqlDbType.VarChar, 10)); 
     dataAdp.SelectCommand.Parameters["@ticker"].Value = (string)ticker.ToString(); 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@company", SqlDbType.VarChar, 25)); 
     dataAdp.SelectCommand.Parameters["@company"].Value = (string)company.ToString(); 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@avgpft", SqlDbType.VarChar, 10)); 
     dataAdp.SelectCommand.Parameters["@avgpft"].Value = (string)avgprofit.ToString(); 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@mnpft", SqlDbType.VarChar, 10)); 
     dataAdp.SelectCommand.Parameters["@mnpft"].Direction = ParameterDirection.Output; 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@authld", SqlDbType.VarChar, 6)); 
     dataAdp.SelectCommand.Parameters["@authld"].Direction = ParameterDirection.Output; 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@hld", SqlDbType.VarChar, 6)); 
     dataAdp.SelectCommand.Parameters["@hld"].Direction = ParameterDirection.Output; 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@trd", SqlDbType.VarChar, 6)); 
     dataAdp.SelectCommand.Parameters["@trd"].Direction = ParameterDirection.Output; 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@extnow", SqlDbType.VarChar, 6)); 
     dataAdp.SelectCommand.Parameters["@extnow"].Direction = ParameterDirection.Output; 
     dataAdp.SelectCommand.Parameters.Add(new SqlParameter("@extdte", SqlDbType.VarChar, 15)); 
     dataAdp.SelectCommand.Parameters["@extdte"].Value = (string)extdte.ToString(); 
     dataAdp.Fill(HoldVals); 
     mnpft = HoldVals.Rows[0]["MinProfit"].ToString(); 
     authld = HoldVals.Rows[0]["AutoHold"].ToString(); 
     trd = HoldVals.Rows[0]["Trade"].ToString(); 
     hld = HoldVals.Rows[0]["Hold"].ToString(); 
     extnow = HoldVals.Rows[0]["ExitNow"].ToString(); 
     return HoldVals; 

    } 

Respuesta

6

Es necesario contener una referencia al parámetro de salida variable de para que pueda acceder el valor devuelto a él utilizando parameter.value una vez que el adaptador ha ejecutado el comando.

+0

gracias por su respuesta Estoy seguro de que es útil, pero voy a golpear la mesa dos veces - actualizar con una y luego devolver una tabla con la siguiente para obtener los parámetros ... es 'más fácil para yo. – CraigJSte

+0

gracias por su respuesta. me ayudó mucho –