2012-09-07 20 views
5

¿Cómo pasar un valor entero como los parámetros del comando SQL?Cómo pasar parámetros int en Sql commandText

Estoy tratando de esta manera:

cmd.CommandText = ("insert_questions '" + 
cmd.Parameters.AddWithValue(store_result,store_result) + "','" + 
cmd.Parameters.AddWithValue(store_title, store_title) + "', '" + 
cmd.Parameters.AddWithValue(store_des, store_des) + "'"); 

store_result es de tipo int y otros 2 parámetros son de tipo cadena.

store_result está dando un mensaje de error como el de abajo.

Argumento 1: no se puede convertir de 'int' a 'cadena'

en SP, hay una variable otro tipo int que obtendrá el valor de store_result.

¿Cuál es la sintaxis correcta para pasar los parámetros int?

Gracias.

+0

No ponga delimitadores de cadenas alrededor de su valor int (pero sospecha que este es el menor de sus problemas). – phoog

Respuesta

5

debería ser así,

cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = ("insert_questions") ; 
cmd.Parameters.AddWithValue("@value", valueHere); 
cmd.Parameters.AddWithValue("@value2", valueHere); 

nota que @value y @value2 son los parámetros declarados en el procedimiento almacenado.

5

Prueba esto:

 cmd.CommandText = ("insert_questions @store_result, @store_title, @store_des"); 
     cmd.Parameters.AddWithValue("@store_result", store_result); 
     cmd.Parameters.AddWithValue("@store_title", store_title); 
     cmd.Parameters.AddWithValue("@store_des", store_des); 
3

No concatenas las instancias SqlParameter; en su lugar:

cmd.CommandText = "insert_questions @store_result, @store_title, @store_des"; 
cmd.Parameters.AddWithValue("store_result", store_result); 
cmd.Parameters.AddWithValue("store_title", store_title); 
cmd.Parameters.AddWithValue("store_des", store_des); 

Los nombres utilizados en AddWithValue se utilizan en el TSQL como @store_result, etc.

Si asumimos que inert_questions es en realidad un proc, entonces es aún más simple:

cmd.CommandText = "insert_questions"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.AddWithValue("store_result", store_result); 
cmd.Parameters.AddWithValue("store_title", store_title); 
cmd.Parameters.AddWithValue("store_des", store_des); 

Alternativamente, si todo eso parece tedioso, las herramientas como dapper-dot-net lo hacen más fácil:

someOpenConnection.Execute("insert_questions",  
     new { store_result, store_title, store_des }, 
     commandType: CommandType.StoredProcedure); 
9

la forma correcta de ir es

using(var connection = new SqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    using(var command = new SqlCommand("SELECT * FROM Table WHERE [email protected]",connection)) 
    { 
     command.Parameters.AddWithValue("someID",1234); 
     var r = command.ExecuteQuery(); 
    } 
} 

esto significa que funciona incluso con consultas de texto. es aún más fácil con los procedimientos almacenados - en lugar de consulta SQL que acaba de proporcionar nombre del procedimiento almacenado:

using(var connection = new SqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    using(var command = new SqlCommand("insert_sproc",connection)) 
    { 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.AddWithValue("someID",1234); 
     var r = command.ExecuteQuery(); 
    } 
} 
Cuestiones relacionadas