2012-09-07 14 views
5

Jak przekazać wartość całkowitą, taką jak parametry polecenia SQL?Jak przekazywać parametry wewnętrzne w komendzie SqlText

Próbuję tak:

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 int a pozostałe 2 to parametr typu ciąg.

store_result wyświetla komunikat o błędzie, jak poniżej.

Argument 1: nie można przekonwertować z 'int' do 'string'

w SP, istnieje inna zmienna typu int, która dostanie wartość store_result użytkownika.

Jaka jest prawidłowa składnia dla przekazywania parametrów?

Dziękuję.

+0

Nie należy umieszczać ograniczników stringów wokół wartości int (ale podejrzewam, że jest to najmniejszy z problemów). – phoog

Odpowiedz

5

powinno być tak,

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

nuta że @value i @value2 są parametry deklarowane w procedurze przechowywanej.

5

Spróbuj tego:

 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

Nie łączysz instancji SqlParameter; zamiast:

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); 

Nazwy użyte w AddWithValue są wykorzystywane w TSQL jak @store_result itp

Jeśli założymy, że inert_questions jest rzeczywiście proc, to jest jeszcze prostsza:

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); 

Ewentualnie, jeśli wszystko to wydaje się nudne, narzędzia takie jak zręczna siatka-kropka ułatwiają to:

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

prawidłowa droga jest

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(); 
    } 
} 

oznacza to, że działa nawet z zapytań tekstowych. jest to jeszcze prostsze dzięki procedurom przechowywanym - zamiast kwerendy sql wystarczy podać nazwę procedury składowanej:

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(); 
    } 
} 
Powiązane problemy