2014-12-14 4 views
1

Я новичок в написании хранимых процедур, и у меня есть некоторые проблемы, выполняющие этот one.it может обновить имя и адрес, но не может обновить employeecount. И я не могу отслеживать ошибку, которую я сделал.Сохраненная процедура обновления не работает

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_update_company_details`(
IN p_id int(11), 
IN p_name varchar(45), 
IN p_address varchar(45), 
IN p_num_employee int(11) 
) 
BEGIN 
UPDATE company 
SET name=p_name, 
    address=p_address, 
    employeecount=p_num_employee 
WHERE id=p_id; 
END 

И это таблица в базе данных

CREATE TABLE `company` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(45) NOT NULL, 
`address` varchar(45) DEFAULT NULL, 
`employeecount` int(11) DEFAULT NULL, 
`logo` blob, 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1; 

СТАНД таблицы, а не что-нибудь фантазии.

И вот как iam вызывает эту хранимую процедуру.

MySqlCommand cmd = new MySqlCommand(String.Format("call sp_update_company_details({0},'{1}','{2}',{3})", 
        id,request.Name,request.Address,request.NumberOfEmployees), conn); 

id и request передаются в качестве параметра функции, где производится этот вызов.

+1

Как вы это назвали? Это должно либо все преуспеть, либо все провалиться. – JRLambert

+0

@JRLambert см. Обновление – Kunal0615

+0

Вы уверены, что 'request.NumberOfEmployees' имеет значение, которое, по вашему мнению, имеет? – outlyer

ответ

0

Это почти наверняка проблема с кодом вызова, а не хранимой процедурой. Если вы попытаетесь выполнить его из инструментария, он должен преуспеть без каких-либо проблем.

вычищать и исправить свой код, вы действительно должны сделать свой вызов (все ваши звонки и запросы) paramaterized так:

 using (var conn = new MySqlConnection("connString")) 
     { 
      using (var cmd = new MySqlCommand("sp_update_company_details")) 
      { 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.Parameters.AddWithValue("p_id", id); 
       cmd.Parameters.AddWithValue("p_name", request.Name); 
       cmd.Parameters.AddWithValue("p_address", request.Address); 
       cmd.Parameters.AddWithValue("p_num_employee", request.NumberOfEmployees); 

       try 
       { 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
      } 
     } 

Я хотел бы также сделать шаг через, чтобы гарантировать, что значения вы считаете, что они передаются по запросу, фактически являются ценностями, которые вы считаете ими.

+1

@JRLamlbert благодарит человека – Kunal0615

Смежные вопросы