2015-06-08 6 views
0

я создать хранимую процедуру в T-SQLхранимой процедуры из T-SQL в C#

CREATE PROCEDURE price_proc @type_of_service int, @date_of_receipt date, @date_of_delivery date, @mechanic_id int, @car_id_p int, @price_for_work float 
AS 
DECLARE @count int, @car_id int 
SELECT @car_id = car_id, @count = COUNT(car_id) FROM work WHERE car_id = @car_id_p GROUP BY car_id 
IF(@count > 1 AND @count < 4) 
BEGIN 
    SET @price_for_work = @price_for_work - (@price_for_work * 0.1) 
    INSERT INTO work(type_of_service_id, date_of_receipt, date_of_delivery, mechanic_id, car_id, price_for_work) VALUES (@type_of_service, @date_of_receipt, @date_of_delivery, @mechanic_id, @car_id_p, @price_for_work) 
END 
ELSE IF(@count > 4) 
BEGIN 
    SET @price_for_work = @price_for_work - (@price_for_work * 0.15) 
    INSERT INTO work(type_of_service_id, date_of_receipt, date_of_delivery, mechanic_id, car_id, price_for_work) VALUES (@type_of_service, @date_of_receipt, @date_of_delivery, @mechanic_id, @car_id_p, @price_for_work) 
END 
GO 

Я называю это в моем коде

string d1 = String.Format("{0:yyyy-MM-dd}", dateTimePicker1.Value); 
string d2 = String.Format("{0:yyyy-MM-dd}", dateTimePicker2.Value); 

cmd = new SqlCommand("price_proc", SqlConn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@type_of_service", SqlDbType.Int)).Value = type_of_service_id; 
cmd.Parameters.Add(new SqlParameter("@date_of_receipt", SqlDbType.Date)).Value = d1; 
cmd.Parameters.Add(new SqlParameter("@date_of_delivery", SqlDbType.Date)).Value = d2; 
cmd.Parameters.Add(new SqlParameter("@mechanic_id", SqlDbType.Int)).Value = mechanic_id; 
cmd.Parameters.Add(new SqlParameter("@car_id_p",SqlDbType.Int)).Value = car_id; 
cmd.Parameters.Add(new SqlParameter("@price_for_work", SqlDbType.Float)).Value = price; 
cmd.ExecuteNonQuery(); 

Но это не работает? Я печатаю cmd.ExecuteNonQuery() и даю -1. Помоги мне, пожалуйста.

+1

Поместите 'cmd.ExecuteNonQuery' вокруг try {} catch {} и сообщите нам, что это за ошибка .. также при запуске этой строки вручную' SELECT @car_id = car_id, @count = COUNT (car_id) FROM work WHERE car_id = @car_id_p GROUP BY car_id 'какие результаты возвращаются .. также что, если count is = to 1 или count is = to 4 ..? 'IF (@count> = 1 AND @count <4)', а второй должен проверить if> = 4 – MethodMan

ответ

1

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

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