Я немного новичок в 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();
}
}
}
}