«Должен объявить скалярную переменную @dni» - PullRequest
0 голосов
/ 26 июня 2019

Я немного новичок в C # и не могу понять, почему он выдает ошибку:

Необходимо объявить скалярную переменную @dni

Нет проблем при создании проекта, но когда я запускаю приложение и достигаю определенного представления, после того, как я вставляю значения и нажимаю кнопку «продолжить», появляется указанная ошибка

var command = new SqlCommand(
                    "INSERT INTO [POLICHICHI].Usuarios(dni,nombre,apellido,direccion,telefono,fechaNacimiento,idRol)" +
                    "VALUES (@dni,@nombre,@apellido,@direccion,@telefono,@fechaNacimiento,2);" +
                    "SELECT SCOPE_IDENTITY();",
                    transaccion.Connection);

command.Transaction = transaccion;
command.Parameters.Add("@dni", SqlDbType.Decimal, 18).Value = Decimal.Parse(textBox1.Text);
command.Parameters.Add("@nombre", SqlDbType.NVarChar, 255).Value = textBox3.Text;
command.Parameters.Add("@apellido", SqlDbType.NVarChar, 255).Value = textBox6.Text;
command.Parameters.Add("@direccion", SqlDbType.NVarChar, 255).Value = textBox4.Text;
command.Parameters.Add("@telefono", SqlDbType.Int).Value = Convert.ToInt32(textBox2.Text);
command.Parameters.Add("@fechaNacimiento", SqlDbType.DateTime2, 3).Value = dateTimePicker1.Text;

Хотя я не уверен, я бы подумал, что и @dni, и @telefono могут вызывать проблемы.

РЕДАКТИРОВАТЬ: вот полное событие

private void button3_Click(object sender, EventArgs e)
        {
            var transaccion = Program.conexion().BeginTransaction();

            try
            {
                if (estaVacio(textBox1.Text) || estaVacio(textBox2.Text) || estaVacio(textBox3.Text) || estaVacio(textBox4.Text))
                {
                    throw new Exception("Debe llenar los campos obligatorios");
                }

                if (!contieneSoloNumeros(textBox1.Text))
                {
                    throw new Exception("El dni debe estar compuesto solo por numeros");
                }

                // Hay que hacer un if aca, porque es insert si es la primera vez o Update si ya compro alguna vez
                var command4 = new SqlCommand(
                    "INSERT INTO [POLICHICHI].Usuarios(dni,nombre,apellido,direccion,telefono,fechaNacimiento,idRol) " +
                    "VALUES (@dni,@nombre,@apellido,@direccion,@telefono,@fechaNacimiento,2); " +
                    "SELECT SCOPE_IDENTITY();",
                    transaccion.Connection);

                command4.Transaction = transaccion;
                command4.Parameters.Add("@dni", SqlDbType.Decimal, 18).Value = 33;//Decimal.Parse(textBox1.Text);
                command4.Parameters.Add("@nombre", SqlDbType.NVarChar, 255).Value = textBox3.Text;
                command4.Parameters.Add("@apellido", SqlDbType.NVarChar, 255).Value = textBox6.Text;
                command4.Parameters.Add("@direccion", SqlDbType.NVarChar, 255).Value = textBox4.Text;
                command4.Parameters.Add("@telefono", SqlDbType.Int).Value = 4333; //Int32.Parse(textBox2.Text);
                command4.Parameters.Add("@fechaNacimiento", SqlDbType.DateTime2, 3).Value = dateTimePicker1.Text;
                 //       2- ¿Que poner en los campos username y password? Supuestamente los tendria que tener al principio cuando se logea

                var idUsuario = command4.ExecuteScalar().ToString();

                command4.Transaction = transaccion;
                command4.Parameters.Clear();
                command4.Parameters.Add("@idUsuario", SqlDbType.Int).Value = idUsuario;

                command4.ExecuteNonQuery();

                transaccion.Commit();

            }
            catch (Exception excepcion)
            {
                MessageBox.Show(excepcion.Message, "Error", MessageBoxButtons.OK);
            }

            if (!estaVacio(textBox1.Text) || !estaVacio(textBox2.Text) || !estaVacio(textBox3.Text) || !estaVacio(textBox4.Text))
            {
                if (contieneSoloNumeros(textBox1.Text))
                {
                    using (Form generarReserva = new CompraReservaPasaje.generarReserva())
                    {
                        this.Hide();
                        generarReserva.ShowDialog();
                        this.Show();
                    }
                }
            }

        }

1 Ответ

0 голосов
/ 26 июня 2019

В этих комментариях @Alex помог мне решить проблему, с которой я столкнулся

«Необходимо объявить скалярную переменную @dni»

«Необходимо объявить скалярную переменную @dni»

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