Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/107: Рейтинг темы: голосов - 107, средняя оценка - 4.87
Рига123
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 11
1

Вызов хранимой процедуры в с#

21.12.2011, 13:19. Просмотров 21409. Ответов 8
Метки нет (Все метки)

Хочу обновить бд с помощью хранимой процедуры
T-SQL
1
2
ALTER procedure [dbo].[Addzakaz] @id_TP int, @id_worker int, @DT datetime, @id_Texbook int, @col_vo int as 
INSERT INTO Zakaz (id_TP, id_worker, date, id_Texbook, col_vo ) VALUES (@id_TP, @id_worker, @DT, @id_Texbook, @col_vo)
В sqlServer все работает, когда пытаюсь вызвать процедуру

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mycom.CommandType = CommandType.StoredProcedure; 
mycom.CommandText = "Addzakaz (@idTP, @idWORK, @DT, @idTB, @col)";
 mycom.Parameters.Add("@DT", SqlDbType.DateTime);
 mycom.Parameters["@DT"].Value = dateTimePicker1.Value;
 mycom.Parameters.Add("@idWORK", SqlDbType.Int);
 mycom.Parameters["@idWORK"].Value = idWORK;
 mycom.Parameters.Add("@idTB", SqlDbType.Int); 
mycom.Parameters["@idTB"].Value = idTB;
 mycom.Parameters.Add("@idTP", SqlDbType.Int);
 mycom.Parameters["@idTP"].Value = idTP; 
mycom.Parameters.Add("@col", SqlDbType.Int);
 mycom.Parameters["@col"].Value = col; 
conn.Open();
 mycom.ExecuteNonQuery();
 conn.Close();
Ругается на mycom.ExecuteNonQuery(); пишет

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: Could not find stored procedure 'Addzakaz @idTP, @idWORK, @DT, @idTB, @col'.

Добавлено через 54 минуты
Ответа нет, но спасибо хоть выговорилась Правда чего ему не хватает, я так и не поняла
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2011, 13:19
Ответы с готовыми решениями:

Вызов хранимой процедуры
Как вызвать хранимую процедуру в БД Access через Viasual Studio 2015 Community. Хранимые процедуры:...

Вызов хранимой процедуры
Здравствуйте, помогите пожалуйста. Мне нужно сделать, чтобы на форму в ЛистБокс выводилась...

Вызов хранимой процедуры
Привет! У меня есть база данных и запрос, написанный на SQL в сишарпе. Таблица из базы данных...

Вызов хранимой процедуры
Добрый день У меня есть процедура хранимая в MySQL на добавление строки CREATE DEFINER =...

Вызов хранимой процедуры
есть хранимая процедура. Надо ее вызвать и что бы она заменила один столбец в БД. если что проект...

8
WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
21.12.2011, 14:38 2
ну значит на базе нет этой хранимки
и зачем для обычного инсерта вообще процедура
0
Рига123
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 11
21.12.2011, 15:14  [ТС] 3
Хранимка нужна для курсовой.
Сама процедура в проект добавлена, несколько раз проверяла.
А вызов процедуры верный? Сомневаюсь насчет mycom.CommandText = "Addzakaz (@idTP, @idWORK, @DT, @idTB, @col)"; Нужно перечислять параметры явно? Хотя и с ними и без них не работает. Правда пишет разные ошибки.
1
WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
22.12.2011, 11:12 4
в какой проект? процедура на базе должна быть, sql же пишет Could not find stored procedure значит ее нету на базе
попробуй еще так
C#
1
2
3
mycom.CommandType = CommandType.Text; 
mycom.CommandText = "EXEC Addzakaz (@idTP, @idWORK, @DT, @idTB, @col)";
//дальше как раньше
и еще этот скрипт
SQL
1
2
ALTER PROCEDURE [dbo].[Addzakaz] @id_TP INT, @id_worker INT, @DT DATETIME, @id_Texbook INT, @col_vo INT AS 
INSERT INTO Zakaz (id_TP, id_worker, DATE, id_Texbook, col_vo ) VALUES (@id_TP, @id_worker, @DT, @id_Texbook, @col_vo)
не выполняет процедуру а обновляет ее саму

попробуй в sql
SQL
1
EXEC dbo.Addzakaz 1, 2, '2001-01-01', 3,4
0
22.12.2011, 11:12
znake
гроза ленивых студентов
451 / 406 / 51
Регистрация: 27.03.2011
Сообщений: 823
22.12.2011, 11:19 5
WonderFlik, в первом посте было:
T-SQL
1
2
ALTER PROCEDURE [dbo].[Addzakaz] @id_TP INT, @id_worker INT, @DT DATETIME, @id_Texbook INT, @col_vo INT AS 
INSERT INTO Zakaz (id_TP, id_worker, DATE, id_Texbook, col_vo ) VALUES (@id_TP, @id_worker, @DT, @id_Texbook, @col_vo)
получается, что проца в базе есть (иначе, насколько я понимаю, ALTER бы падал)...

меня вот что смущает: в альтере есть непонятные мне символы [dbo]... будь это оракл, я бы посчитал, что так обзывается пакет, а если так звать пакет, то и в вызов процы его имя тоже надо передавать наряду с самой процой (в оракле так во всяком случае, как в склСервере - хз)...

плюс в интернетах наткнулся, что кто-то в CommndText помимо имени процы и параметров в начале пишет EXEC... я с склСервером не сталкивался сам, но вдруг и впрямь надо

но это так, в пользу бедных...
0
WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
22.12.2011, 11:29 6
dbo это схема доступа стандартная, можешь попробовать в текст добавить dbo. может поможет
вообще в sqlserver хранимка вызывается EXEC'ом но если CommandType.StoredProcedure EXEC в тексте писать не надо
0
_ZnOFF_
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
22.12.2011, 14:55 7
Вызвать хранимку можно кучей разных способов.(Точнее код будет выглядеть сильно по-разному).
Вот на мой взгляд самый простой код, вызывающий хранимую процедуру:
C#
1
2
3
4
5
6
7
8
9
SqlCommand comm = сonn.CreateCommand();
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "Addzakaz";
comm.Parameters.AddWithValue("idTP", idTP);
comm.Parameters.AddWithValue("id_worker", id_worker);
comm.Parameters.AddWithValue("DT", DT);
comm.Parameters.AddWithValue("id_Texbook", id_Texbook);
comm.Parameters.AddWithValue("col_vo", col_vo);
comm.ExecuteNonQuery();
1
andrew_w2k
328 / 328 / 90
Регистрация: 04.03.2010
Сообщений: 648
22.12.2011, 15:22 8
_ZnOFF_, интересно, где же у Вас все описанные параметры, которые принимает процедура?
0
_ZnOFF_
22.12.2011, 17:26     Вызов хранимой процедуры в с#
  #9

Не по теме:

Цитата Сообщение от andrew_w2k Посмотреть сообщение
_ZnOFF_, интересно, где же у Вас все описанные параметры, которые принимает процедура?
Ну у меня в текущем проекте обращения к БД являются методами класса-контроллера. Иными словами, класс формы вызывает методы и при этом понятия не имеет как работает метод и откуда он получает(куда сохраняет) данные - из базы данных SQL Server, My SQL, из txt-файла и тп.
Соответственно параметры - это параметры метода. Мы просто пихаем их в параметры sql-команды, и всё само работает. Проверено на практике. Косяков не обнаружено. Пример метода:
C#
1
2
3
4
5
6
7
8
9
10
11
public void UpdateReclameCampaignOrderTypeProcent(object rcotp_id, object rcam_id, object ordt_id, object rcotp_procent)
{
    SqlCommand comm = connection.CreateCommand();
    comm.CommandType = CommandType.StoredProcedure;
    comm.CommandText = "update_reclame_campaign_order_type_procent";
    comm.Parameters.AddWithValue("rcotp_id", rcotp_id);
    comm.Parameters.AddWithValue("rcam_id", rcam_id);
    comm.Parameters.AddWithValue("ordt_id", ordt_id);
    comm.Parameters.AddWithValue("rcotp_procent", rcotp_procent);
    comm.ExecuteNonQuery();    
}

0
22.12.2011, 17:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 17:26
Привет! Вот еще темы с ответами:

Вызов хранимой процедуры в форме
Доброго времени суток. В C# я ламер. Стоит visual studio, SQL Server 2008. Есть хранимая процедура...

Вызов хранимой процедуры из MySQL
Сразу скажу что в vs 2010 работал мало и только перехожу на него с Delphi, поэтому прошу сильно не...

Вызов хранимой процедуры в FirebirdSQL
Вызываю хранимую процедуру в FirebirdSQL. Вот так: FbCommand res = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.