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

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

13.07.2012, 15:20. Просмотров 531. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 15:20
Ответы с готовыми решениями:

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

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

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

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

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

7
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
17.07.2012, 12:09 2
C#
1
cmd.Parameters.Add("@path", SqlDbType.VarChar).Value = newpath.Replase(@"\", @"\\");
0
BeBeL
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
17.07.2012, 12:42  [ТС] 3
Да нет, строка передается в правильном виде. В примере я показал то, что должно было появиться в поле таблицы.
0
ansi_str
56 / 56 / 15
Регистрация: 22.09.2011
Сообщений: 319
17.07.2012, 14:21 4
Значение newpath передаётся в функцию не пустым?
0
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
17.07.2012, 15:21 5
символ \ - это специальный символ, который указывает на начало эскейп-последовательности. потому для коррекного отражения символа \ необходимо использовать \\
0
BeBeL
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
18.07.2012, 18:24  [ТС] 6
Ребята, всё передается правильно. Строка не пустая. В примере я указал, что должно было записаться в БД, сама же строка в программе передается в виде "\\\\srv\\arcive\\FilesArh\\Test\\4798639.txt". А в поле таблицы появляется только '\'.
0
kolorotur
Эксперт .NET
11196 / 9121 / 2301
Регистрация: 17.09.2011
Сообщений: 15,667
Завершенные тесты: 1
19.07.2012, 00:37 7
У вас тип параметра хранимой процедуры указан как varchar без указания размера, что по умолчанию делает аргумент длиной в 1 символ. Вот этот первый символ строки и передается.
Укажите максимальный размер строки, varchar(256), например.
1
BeBeL
0 / 0 / 1
Регистрация: 02.03.2010
Сообщений: 46
23.07.2012, 18:37  [ТС] 8
Цитата Сообщение от kolorotur Посмотреть сообщение
У вас тип параметра хранимой процедуры указан как varchar без указания размера, что по умолчанию делает аргумент длиной в 1 символ. Вот этот первый символ строки и передается.
Спасибо. В упор не видел.
0
23.07.2012, 18:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 18:37

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

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

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


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

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

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