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

Неправильная работа хранимой процедуры

13.07.2012, 15:20. Показов 909. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Сложилась у меня такая ситуация:
В БД (MS SQL) есть следующая ХП:
T-SQL
1
2
3
4
5
6
7
8
9
CREATE procedure [sp_UpdateFiles]
(@path varchar, @id_file int)
as
BEGIN
Begin transaction
  UPDATE Files Set Path = @path
  WHERE id_file = @id_file
commit
END
В программе, соответственно, обращаюсь к ней:
C#
1
2
3
4
5
6
7
8
9
10
11
public void UpdateFiles(string newpath, int id)
{
    SqlConnection connect = new SqlConnection(ConnStr);
    SqlCommand cmd = new SqlCommand("sp_UpdateFiles", connect);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@path", SqlDbType.VarChar).Value = newpath;
    cmd.Parameters.Add("@id_file", SqlDbType.Int).Value = id;
    connect.Open();
    cmd.ExecuteNonQuery();
    connect.Close();
}
newpath виглядит примерно так: \\srv\arcive\FilesArh\Test\4798639.txt
Ну а id - он и есть id.

Проблема в том, что после выполнения ХП в поле Path появляется только один '\' и всё.
Что не так? Где я ошибся?

Добавлено через 20 минут
Я конечно, сейчас сделал работу без использования ХП, просто выполняя апдейт. Так всё работает. Но хотелось бы понять, почему неверно сработала процедура? Может, виной двойной слэш в начале строки?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2012, 15:20
Ответы с готовыми решениями:

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

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

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

7
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
17.07.2012, 12:09
C#
1
cmd.Parameters.Add("@path", SqlDbType.VarChar).Value = newpath.Replase(@"\", @"\\");
0
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
17.07.2012, 12:42  [ТС]
Да нет, строка передается в правильном виде. В примере я показал то, что должно было появиться в поле таблицы.
0
57 / 57 / 15
Регистрация: 22.09.2011
Сообщений: 319
17.07.2012, 14:21
Значение newpath передаётся в функцию не пустым?
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
17.07.2012, 15:21
символ \ - это специальный символ, который указывает на начало эскейп-последовательности. потому для коррекного отражения символа \ необходимо использовать \\
0
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
18.07.2012, 18:24  [ТС]
Ребята, всё передается правильно. Строка не пустая. В примере я указал, что должно было записаться в БД, сама же строка в программе передается в виде "\\\\srv\\arcive\\FilesArh\\Test\\479863 9.txt". А в поле таблицы появляется только '\'.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.07.2012, 00:37
У вас тип параметра хранимой процедуры указан как varchar без указания размера, что по умолчанию делает аргумент длиной в 1 символ. Вот этот первый символ строки и передается.
Укажите максимальный размер строки, varchar(256), например.
1
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
23.07.2012, 18:37  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
У вас тип параметра хранимой процедуры указан как varchar без указания размера, что по умолчанию делает аргумент длиной в 1 символ. Вот этот первый символ строки и передается.
Спасибо. В упор не видел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2012, 18:37
Помогаю со студенческими работами здесь

Отчет из хранимой процедуры
Подскажите, как в Visual Studio 2010 создать отчет на основе хранимой процедуры? код процедуры ALTER procedure . @_param1 Date, ...

Вызов хранимой процедуры
Хочу обновить бд с помощью хранимой процедуры ALTER procedure . @id_TP int, @id_worker int, @DT datetime, @id_Texbook int, @col_vo int...

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru