Quiero insertar algunos datos en la tabla SQL. Pero al insertar int, no importa lo que haya intentado, aparece el error:

System.Data.SqlClient.SqlException: 'La conversión falló al convertir el valor varchar' @ID 'al tipo de datos int.'

Incluso configuré manualmente la ID en 1 simplemente para estar 100% seguro de que es int, pero aún obtengo ese error

String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
VALUES ('@ID','@secondvar')";             
 using (SqlCommand cmd = new SqlCommand(query, connection))
                    {
                        int ID = 1;
                        cmd.Parameters.AddWithValue("@ID", ID);
                        cmd.Parameters.AddWithValue("@secondvar", tableModel.secondvar);    
                        connection.Open();
                        int result = cmd.ExecuteNonQuery();
0
David 16 oct. 2018 a las 14:56

2 respuestas

La mejor respuesta

Elimina las comillas alrededor de los valores. El marco ya lo maneja.

VALUES ('@ID','@secondvar')

Debe ser

VALUES (@ID,@secondvar)
5
juergen d 16 oct. 2018 a las 11:58

ID es un número entero, por lo que no debe estar entre '':

Cambie esta línea:

String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
VALUES ('@ID','@secondvar')";

A esto:

String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
VALUES (@ID,@secondvar)";

Y es mejor evitar usar AddWithValue en lugar de usarlo como:

String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
VALUES (@ID,'@secondvar')";             
 using (SqlCommand cmd = new SqlCommand(query, connection))
 {
      int ID = 1;
      cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;
      cmd.Parameters.Add("@secondvar", SqlDbType.VarChar).Value = somevalue; 
      //rest of the code
 }
1
Ashkan Mobayen Khiabani 16 oct. 2018 a las 12:07