c# .net sql parameters

c# - dataadapter parameters



Sql Parameter Collection (7)

Tengo 5 parámetros y quiero enviarlos al método:

public static SqlCommand getCommand(string procedure, SqlParameter[] parameter) { Sqlcommand cmd; return cmd }

¿Puedo enviar estos parámetros de una vez como este?

SqlParameterCollection prm; prm.Add(p1); prm.Add(p2); prm.Add(p3); prm.Add(p4); prm.Add(p5); sqlcommand cmd = getCommand(prm);


Bueno, eso no compilará porque en su llamada a getCommand no está pasando una cadena con el procedimiento, pero en cuanto a la matriz, debería funcionar sin problemas.


O crea una matriz de parámetros a mano:

SqlParameter[] parameter = { new SqlParameter(...), new SqlParameter(...), new SqlParameter(...) };

Pero no veo qué debería estar mal con su enfoque. Es simple, legible y extensible.


No veo lo que está mal con eso? ¿Sabía que, si esto es .NET, necesita adjuntar los parámetros al objeto SqlCommand ?

Asi que:

SqlCommand query = new SqlCommand(sqlString, Connection); query.Parameters.AddWithValue(parameter,valueToPass);

etc?

Lo siento si eso no está relacionado, ¿no está completamente seguro de su pregunta? Tu método realmente no hace nada, tomo como excluido el código y simplemente lo pongo en un muñeco con el propósito de hacer la pregunta. ¿Puede pasar una matriz como argumento para que solo lo derrame?


Form1.cs

static private void FunctionCall() { string connectionString = "DATA Source=nwind;server=GRAPHICS/SQLEXPRESS;Persist Security Info=False;Integrated Security=SSPI;Connect Timeout=30"; string sSqlQuery; DataSet ds; DataTable dt; // Prepare SQL Query sSqlQuery = @" select content " + "from " + "[TBL] where id = ''000-000''"; SqlParameter[] sqlParams = { new SqlParameter("",SqlDbType.Int), new SqlParameter("",SqlDbType.VarChar), new SqlParameter("",SqlDbType.VarChar) }; // Read from database ds = SqlHelper.ExecuteNonQuery(connectionString, sSqlQuery, CommandType.Text, sqlParams); dt = ds.Tables[0]; }

SqlHelper.cs

// Ejecuta una consulta no

public static int ExecuteNonQuery (string connectionString, string cmdText, CommandType type, SqlParameter[] prms) { using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(cmdText, conn)) { cmd.CommandType = type; if (prms != null) { foreach (SqlParameter p in prms) { cmd.Parameters.Add(p); } } conn.Open(); return cmd.ExecuteNonQuery(); } } }


Aquí está mi código. Puede usar todas las propiedades de los parámetros como nombre, valor, tipo, etc.

int SelectedListID = 6; string selectedPrefix = "IP"; string sqlQuery = "select * from callHistory where ImportID=@IMPORTID and Prefix=@PREFIX" SqlParameter[] sParams = new SqlParameter[2]; // Parameter count sParams[0] = new SqlParameter(); sParams[0].SqlDbType = SqlDbType.Int; sParams[0].ParameterName = "@IMPORTID"; sParams[0].Value = SelectedListID; sParams[1] = new SqlParameter(); sParams[1].SqlDbType = SqlDbType.VarChar; sParams[1].ParameterName = "@PREFIX"; sParams[1].Value = selectedPrefix; SqlCommand cmd = new SqlCommand(sqlQuery, sConnection); if (sParams != null) { foreach (SqlParameter sParam in sParams) { cmd.Parameters.Add(sParam); Application.DoEvents(); } }


Usando esto como inspiración, este código funcionó para mí:

List<SqlCeParameter> parameters = new List<SqlCeParameter>(); parameters.Add(new SqlCeParameter("@Username", NewUsername)); parameters.Add(new SqlCeParameter("@Password", Password)); cmd.Parameters.AddRange(parameters.ToArray());


1.

public IEnumerable<SqlParameter> GetAndSetParameters(List<Tuple<string, string>> parameters){ List<SqlParameter> paramlist = new List<SqlParameter>(); foreach (var item in parameters) { paramlist.Add(new SqlParameter(item.Item1, item.Item2)); } return paramlist; }

2. pasar parámetros

public List<Tuple<string, string>> GetUserParameter(){ List<Tuple<string, string>> list = new List<Tuple<string, string>>(); list.Add(new Tuple<string, string>("@User",user.UserID)); return list; }

3. finalmente úsala:

SqlCommand oCmd = new SqlCommand(oString, myConnection); oCmd.Parameters.AddRange(GetAndSetParameters(GetUserParameter()).ToArray());