Tengo diez cuadros de texto en mi winform, y tengo que guardar el texto escrito en estos cuadros de texto en 10 columnas de una tabla de base de datos sql. así que, por esto escribo :

INSERT INTO item (c1,c2,c3...,c10) values (@a,@b....@j) 

cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
.
.
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

O diez consultas por separado para cada cuadro de texto:

INSERT INTO item (c1) values (@a)
cmd.Parameters.Add("@a",SqlDbType.Varchar)
cmd.Parameteres["@a"].Value=textbox1.Text;

INSERT INTO item (c2) values (@b) 
cmd.Parameters.Add("@b",SqlDbType.Varchar)
cmd.Parameteres["@b"].Value=textbox2.Text;.
.
.
INSERT INTO item (c10) values (@j)
cmd.Parameters.Add("@j",SqlDbType.Varchar)
cmd.Parameteres["@j"].Value=textbox10.Text;

o, por favor, sugiera un código eficiente.

Cómo agregar varios parámetros a cmd en una sola instrucción? es posible?

InformationsquelleAutor sqlchild | 2011-03-31

4 Comentarios

  1. 10

    Puede utilizar un método de extensión, como este:

    public static class DbCommandExtensions
    {
        public static void AddInputParameters<T>(this IDbCommand cmd,
            T parameters) where T : class
        {
            foreach (var prop in parameters.GetType().GetProperties())
            {
                object val = prop.GetValue(parameters, null);
                var p = cmd.CreateParameter();
                p.ParameterName = prop.Name;
                p.Value = val ?? DBNull.Value;
                cmd.Parameters.Add(p);
            }
        }
    }

    Luego de la llamada de esta manera:

    cmd.AddInputParameters(new { a = textBox1.Text, b = TextBox2.Text, /* etc */ });

    He usado que en un par de proyectos sin problemas.

    • señor , estoy utilizando .net 2.0 , por lo que en lugar de ‘var’ y <> ¿qué he de usar?
    • IDbCommand.CreateParameter devuelve un IDbDataParameter, para declarar «p» tal que. De lo contrario, esto debería funcionar bien en .NET 2.0 como lo que yo sé.
  2. 2

    La 2 ‘soluciones’ que se sugieren en su pregunta, son semánticamente diferentes.
    Que uno debe utilizar, depende de la tabla de diseño.

    La primera solución inserta un registro en la tabla, la segunda instrucción insert inserta un registro (fila) para cada valor (cuadro de texto).

    Difícil dar una buena respuesta aquí, ya que no sabemos lo que va a guardar en la tabla, y por lo tanto , no podemos decir cómo se debe guardar (cómo guardarlo, es inherintly depende de la forma en que debe llamar a la instrucción SQL insert).

  3. 0

    Puede utilizar una función como esta:

    void AddParams(DBCommand cmd,params object[] parameters)
    {
        if (parameters != null)
        {
            int index = 0;
            while (index < parameters.Length)
            {
                cmd.Parameters.AddWithValue("@"+(string)parameters[index], parameters[index + 1]);
                index += 2;
            }
        }
    }

    No la mejor, probablemente, pero funcional.
    Llame a este enlace:

    AddParams(a,"test1",b,3,c,DateTime.Now);

    O puede utilizar una extensión, como se sugiere desde @Matt Hamilton para añadir esta función en DBCommand clase.

Dejar respuesta

Please enter your comment!
Please enter your name here