Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/146: Рейтинг темы: голосов - 146, средняя оценка - 4.53
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 11

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

21.12.2011, 13:19. Показов 26829. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу обновить бд с помощью хранимой процедуры
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2011, 13:19
Ответы с готовыми решениями:

Вызов хранимой процедуры
Добрый день У меня есть процедура хранимая в MySQL на добавление строки CREATE DEFINER = `root`@`%` PROCEDURE `NewProc`(IN `fam`...

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

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

13
 Аватар для WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
21.12.2011, 14:38
ну значит на базе нет этой хранимки
и зачем для обычного инсерта вообще процедура
0
2 / 2 / 0
Регистрация: 24.11.2010
Сообщений: 11
21.12.2011, 15:14  [ТС]
Хранимка нужна для курсовой.
Сама процедура в проект добавлена, несколько раз проверяла.
А вызов процедуры верный? Сомневаюсь насчет mycom.CommandText = "Addzakaz (@idTP, @idWORK, @DT, @idTB, @col)"; Нужно перечислять параметры явно? Хотя и с ними и без них не работает. Правда пишет разные ошибки.
1
 Аватар для WonderFlik
208 / 138 / 15
Регистрация: 28.04.2011
Сообщений: 389
22.12.2011, 11:12
в какой проект? процедура на базе должна быть, 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
гроза ленивых студентов
 Аватар для znake
456 / 411 / 51
Регистрация: 27.03.2011
Сообщений: 823
22.12.2011, 11:19
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
dbo это схема доступа стандартная, можешь попробовать в текст добавить dbo. может поможет
вообще в sqlserver хранимка вызывается EXEC'ом но если CommandType.StoredProcedure EXEC в тексте писать не надо
0
 Аватар для _ZnOFF_
16 / 16 / 6
Регистрация: 27.06.2010
Сообщений: 48
22.12.2011, 14:55
Вызвать хранимку можно кучей разных способов.(Точнее код будет выглядеть сильно по-разному).
Вот на мой взгляд самый простой код, вызывающий хранимую процедуру:
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
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
22.12.2011, 15:22
_ZnOFF_, интересно, где же у Вас все описанные параметры, которые принимает процедура?
0
22.12.2011, 17:26

Не по теме:

Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 5
02.11.2022, 07:54
Для начало нужно немножко изменить хранимку, чтобы он и таблицу выводил чтобы мы могли наблюдать за изменениями. Добавлям переменную comand и в него добавляем парамтры insert into и select-ом выводим нашу таблицу
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE [Тут пишите свою базу данных]
GO
   
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[addzakaz](@comand INT, @id_TP INT,@id_worker INT,@DT datetime,@id_Texbook INT,@col_vo INT)
AS
BEGIN
 
    SET NOCOUNT ON;
 
IF @comand = 1
BEGIN
    IF NOT EXISTS(SELECT * FROM Zakaz WHERE id_TP =@id_TP AND id_Texbook =@id_Texbook )
    BEGIN
    INSERT INTO Zakaz (id_TP ,id_worker ,DT ,id_Texbook ,col_vo )
    VALUES(@id_TP ,@id_worker ,@DT ,@id_Texbook ,@col_vo )
    END
    END
SELECT * FROM Zakaz
Потом мы создаем связку vs studio и sql.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public void addzakaz(int comand, int id_TP, int id_worker , DateTime DT , int id_Texbook , int col_vo )
        {
            string connectionString = /* Сюда пишите свое подключение к базе данных, ее можете найти в обозревателе серверов называется строка подключение*/;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand("addzakaz", connection)
                {
                    CommandType = CommandType.StoredProcedure,
                    CommandTimeout = 0
                };
                command.Parameters.AddWithValue("@comand", comand);
                command.Parameters.AddWithValue("@id_TP", id_TP);
                command.Parameters.AddWithValue("@id_worker ", id_worker );
                command.Parameters.AddWithValue("@DT ", DT );
                command.Parameters.AddWithValue("@id_Texbook ", id_Texbook );
                command.Parameters.AddWithValue("@col_vo ", col_vo );
 
                dataGridView1.Rows.Clear();
                command.Connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    dataGridView1.Rows.Add(reader["id_TP"].ToString(), reader["id_worker "].ToString(), reader["DT "].ToString(), reader["id_Texbook "].ToString(), reader["col_vo "].ToString());
                }
                reader.Close();
                command.Connection.Close();
                command.Connection.Dispose();
                command.Dispose();
            }
        }
После в кнопку добавляем код для insert into тесть для добавления данных в таблицу
C#
1
2
3
4
5
6
7
private void button2_Click(object sender, EventArgs e)
        {
            if (textBox1.Text.Trim() != "" && numericUpDown1.Value > 0 && numericUpDown2.Value > 0 && numericUpDown3.Value > 0)
            {
                sp_technica(1, Convert.ToInt32(numericUpDown1.Value), Convert.ToInt32(numericUpDown2.Value), dateTimePicker.Value, textBox1.Text.Trim(), Convert.ToInt32(numericUpDown3.Value));
            }
        }
в numericUpDown обьязательно добовляем Convert иначе выдадут ошибку. И в самом конце все это добавляем в dataGridView
C#
1
2
3
4
 private void Form3_Load(object sender, EventArgs e)
        {
            addzakaz(2, 0, 0, dateTimePicker1.Value, "", 0);
        }
Ну и все вообщем как то так
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
02.11.2022, 11:51
Цитата Сообщение от Бекз Посмотреть сообщение
Для начало

Не по теме:

для начала надо смотреть дату темы...

0
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 5
02.11.2022, 12:00
Дату я смотрел, поэтому та я обращался не на автора поста а всем. Уверен для новичков мой ответ будет очень полезным так как сам я этот код еле как написал в начале своей работы
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
02.11.2022, 12:44
Цитата Сообщение от Бекз Посмотреть сообщение
SELECT * FROM Zakaz
выбросить из процедуры данную строку, какой в ней смысл мне не понятно
каждый раз при сохранении мы вызываем таблицу заново? зачем?
любые изменения можно и через ивенты получать

как уже выше написали, зачем процедура для инсерта?

и да, зачем мучаться с sql если есть ef
0
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 5
02.11.2022, 12:56
Понимаю что мой код конечно же не идеален но зато как по мне он жесть как очень простой и понятен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2022, 12:56
Помогаю со студенческими работами здесь

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

Вызов хранимой процедуры
Я создал хранимую процедуру CREATE PROCEDURE . AS SELECT * FROM psss и теперь хочу чтобы она вызывалась по нажатию на...

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru