Как включить параметры в предложение «SqlCommand» и после установки их значений? - PullRequest
0 голосов
/ 12 мая 2018

У меня работает следующая команда SQL Server: (она вставляет данные в таблицу)

try
        {
            // Open conn
            conexion.Open();
            // New trans
            SqlTransaction transaccion = conexion.BeginTransaction();
            // Command
            SqlCommand comandoAEjecutar = new SqlCommand
            {
                Connection = conexion,
                Transaction = transaccion,
                CommandText = @"
                            INSERT INTO [dbo].[table_battery]
                                ([capacity], [description], [image], [price]) 
                            VALUES 
                                (@capacity, @description, @fileContent, @price)
                            "
            };

            int capacity = 50;
            string descr = "Funciona2";
            float price = 70;
            string path = @"C:\Users\Juan\Desktop\Ingeniería Informática\2 año\2º Cuatrimestre\Programación Visual Avanzada\ProyectoFinal\AJMobile\AJMobile\src\images\Battery\baterry_4000.png";
            byte[] fileContent = File.ReadAllBytes(path);

            comandoAEjecutar.Parameters.Add("@capacity", SqlDbType.Int).Value = capacity;
            comandoAEjecutar.Parameters.Add("@description", SqlDbType.VarChar).Value = descr;
            comandoAEjecutar.Parameters.Add("@fileContent", SqlDbType.VarBinary).Value = fileContent;
            comandoAEjecutar.Parameters.Add("@price", SqlDbType.Float).Value = price;

            int numeroFilasAfectadas = comandoAEjecutar.ExecuteNonQuery();
}

Как видите, я добавил параметры и их значения из оператора SqlCommand.Я хочу включить параметры в это утверждение и после установки их значений, например:

try
        {
            // Open conn
            conexion.Open();
            // New trans
            SqlTransaction transaccion = conexion.BeginTransaction();
            // Command
            SqlCommand comandoAEjecutar = new SqlCommand
            {
                Connection = conexion,
                Transaction = transaccion,
                CommandText = @"
                            INSERT INTO [dbo].[table_battery]
                                ([capacity], [description], [image], [price]) 
                            VALUES 
                                (@capacity, @description, @fileContent, @price)
                            ",
                Parameters =
                {
                    // I wanna set their types too
                    "@capacity" as SqlDbType.Int,
                    "@description" as SqlDbType.VarChar,
                    "@fileContent" as SqlDbType.VarBinary,
                    "@price" as SqlDbType.Float
                }
            };


            int capacity = 50;
            string descr = "Funciona2";
            float price = 70;
            string path = @"C:\Users\Juan\Desktop\Ingeniería Informática\2 año\2º Cuatrimestre\Programación Visual Avanzada\ProyectoFinal\AJMobile\AJMobile\src\images\Battery\baterry_4000.png";
            byte[] fileContent = File.ReadAllBytes(path);

            // Add values to parameters
            comandoAEjecutar.Parameters["@capacity"].Value = capacity;
            comandoAEjecutar.Parameters["@description"].Value = descr;
            comandoAEjecutar.Parameters["@fileContent"].Value = fileContent;
            comandoAEjecutar.Parameters["@price"].Value = price;

            int numeroFilasAfectadas = comandoAEjecutar.ExecuteNonQuery();
}

Существует в любом случае для этого?Меня пробовали разными способами, но я не смог этого достичь.

Спасибо.

1 Ответ

0 голосов
/ 12 мая 2018

Вы пытаетесь добавить объекты в коллекцию, поэтому вам нужен соответствующий шаблон инициализатора коллекции.

    Parameters =
    {
        new SqlParameter {ParameterName = "@capacity", DbType = DbType.Int32, Value = capacity},
        new SqlParameter {ParameterName = "@description", DbType = DbType.String, Value = descr},
        new SqlParameter {ParameterName = "@fileContent", DbType = DbType.Binary, Value = fileContent},
        new SqlParameter {ParameterName = "@price", DbType = DbType.Decimal, Value = price}
    }

Это позволит убедиться, что к объекту Command добавлены параметры, как вы ожидаете их позже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...