Делаю проект, в нем из БД вызываются некоторые функции(возвращают string).
В TableDataAdapter делаю метод, который вызывает функцию, метод внутри программы возвращает null(должен вернуть строчку).
На сервере и в просмотре данных работает как надо.
Написал SqlCommand с вызовом этой функции, при выполнении возникает Exception — не встроенная процедура не найдена(трассировка в sql server показывает, что всё хорошо).
БД крутится на локальной машине, проблем с ограничением прав нет.
При этом из этой же базы спокойно заполняются комбобоксы(через dataset).
Здравствуйте, ydabkaa, Вы писали:
Y>Делаю проект, в нем из БД вызываются некоторые функции(возвращают string).
Функции или процедуры?
Y>В TableDataAdapter делаю метод, который вызывает функцию, метод внутри программы возвращает null(должен вернуть строчку).
А как именно Вы вызываете функции?
Y>На сервере и в просмотре данных работает как надо.
Y>Написал SqlCommand с вызовом этой функции, при выполнении возникает Exception — не встроенная процедура не найдена(трассировка в sql server показывает, что всё хорошо).
"не встроенная": "не" — это опечатка?
Y>БД крутится на локальной машине, проблем с ограничением прав нет.
Y>При этом из этой же базы спокойно заполняются комбобоксы(через dataset). Y>Что с этим делать?
Показать код, для начала. Телепаты так и не вернулись с праздников.
2.
using (R_DataSetTableAdapters.PersonTableAdapter pta = new card_reg.R_DataSetTableAdapters.PersonTableAdapter())
{
this.id_num = pta.Get_new_perscode();
}
У tableAdapter`а CommandType = StoredProcedure, ExecuteMode = Scalar
Так получаем null
SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new SqlConnection(Properties.Settings.Default.rguConnectionString));
get_pers_code.Connection.Open();
get_pers_code.CommandType = System.Data.CommandType.StoredProcedure;
this.id_num = Convert.ToString(get_pers_code.ExecuteScalar());
Так получаем Exception
3.Да, опечатался.
4. Код чего конкретно? У меня вообще всё связано через BindingSource`ы.
Re[3]: Проблема с вызовом процедур из БД
От:
Аноним
Дата:
18.03.09 14:27
Оценка:
Здравствуйте, ydabkaa, Вы писали:
Y>1.Функции.
Y>2. Y>using (R_DataSetTableAdapters.PersonTableAdapter pta = new card_reg.R_DataSetTableAdapters.PersonTableAdapter()) Y>{ Y> this.id_num = pta.Get_new_perscode(); Y>} Y>У tableAdapter`а CommandType = StoredProcedure, ExecuteMode = Scalar Y>Так получаем null
Y> SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new SqlConnection(Properties.Settings.Default.rguConnectionString)); Y> get_pers_code.Connection.Open(); Y> get_pers_code.CommandType = System.Data.CommandType.StoredProcedure; Y> this.id_num = Convert.ToString(get_pers_code.ExecuteScalar()); Y>Так получаем Exception
Y>3.Да, опечатался. Y>4. Код чего конкретно? У меня вообще всё связано через BindingSource`ы.
SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new//Select не нужен, пишется просто имя процедурыnew SqlCommand("Get_new_perscode", sqlConnection);
А>SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new//Select не нужен, пишется просто имя процедуры
А>new SqlCommand("Get_new_perscode", sqlConnection);
А>
Без разницы — одинаково хорошо не работает
Re[5]: Проблема с вызовом процедур из БД
От:
Аноним
Дата:
18.03.09 14:38
Оценка:
Здравствуйте, ydabkaa, Вы писали:
А>>
А>>SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new//Select не нужен, пишется просто имя процедуры
А>>new SqlCommand("Get_new_perscode", sqlConnection);
А>>
Y>Без разницы — одинаково хорошо не работает
А Вы профайлером смотрели, какой запрос посылается в БД???
Здравствуйте, ydabkaa, Вы писали:
Y>1.Функции.
Y>2. Y>using (R_DataSetTableAdapters.PersonTableAdapter pta = new card_reg.R_DataSetTableAdapters.PersonTableAdapter()) Y>{ Y> this.id_num = pta.Get_new_perscode(); Y>} Y>У tableAdapter`а CommandType = StoredProcedure, ExecuteMode = Scalar Y>Так получаем null
Функции нельзя вызвать непосредственно, можно только процедуры.
Функцию можно вызвать только куском SQL-кода...
Y> SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new SqlConnection(Properties.Settings.Default.rguConnectionString)); Y> get_pers_code.Connection.Open(); Y> get_pers_code.CommandType = System.Data.CommandType.StoredProcedure; Y> this.id_num = Convert.ToString(get_pers_code.ExecuteScalar()); Y>Так получаем Exception
... но в этом случае CommandType должен быть CommandType.Text
Y>4. Код чего конкретно? У меня вообще всё связано через BindingSource`ы.
Именно тот код, который Вы привели.
А>>SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new//Select не нужен, пишется просто имя процедуры
А>>new SqlCommand("Get_new_perscode", sqlConnection);
А>>
Y>Без разницы — одинаково хорошо не работает
с Select'om он вообще не должен выполнять команды, вы пробовали запустить в sql запрос типа select myProc
Msg 4104, Level 16, State 1, Line 1
The multi-part identifier "myProc" could not be bound.
V>... но в этом случае CommandType должен быть CommandType.Text
Спасибо, первый метод заработал.
Пока проблемы с теми методами, которые принимают переменные
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, ydabkaa, Вы писали:
А>>>
А>>>SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new//Select не нужен, пишется просто имя процедуры
А>>>new SqlCommand("Get_new_perscode", sqlConnection);
А>>>
Y>>Без разницы — одинаково хорошо не работает
А>А Вы профайлером смотрели, какой запрос посылается в БД???
Этот же и посылается.
С первым методом уже всё ок.
Неправильно передает во второй метод =(
Буду думать.
Здравствуйте, ydabkaa, Вы писали:
V>>... но в этом случае CommandType должен быть CommandType.Text Y>Спасибо, первый метод заработал. Y>Пока проблемы с теми методами, которые принимают переменные
Какие проблемы? Пишите — порешаем. Только код приводите, чтобы не гадать.
Здравствуйте, vmpire, Вы писали:
V>Здравствуйте, ydabkaa, Вы писали:
V>>>... но в этом случае CommandType должен быть CommandType.Text Y>>Спасибо, первый метод заработал. Y>>Пока проблемы с теми методами, которые принимают переменные V>Какие проблемы? Пишите — порешаем. Только код приводите, чтобы не гадать.
Программа отправляет серверу вот это:
exec sp_executesql N'SELECT dbo.Get_SocialNumber(@issuer_number, @region_number, @sex, @birthday, @birthmonth, @birthyear, @_unique_number) AS result',N'@issuer_number int,@region_number int,@sex
bit,@birthday int,@birthmonth int,@birthyear int,@_unique_number real',@issuer_number=964390,@region_number=39,@sex=1,@birthday=1,@birthmonth=3,@birthyear=2009,@_unique_number=137
Сервер возвращает null, хотя мне всего-то нужно, чтобы он вместо переменных подставил значения и вернул код.
Впрочем тут уже ручками быстрее написать.
Здравствуйте, ydabkaa, Вы писали:
Y>Программа отправляет серверу вот это: Y>exec sp_executesql N'SELECT dbo.Get_SocialNumber(@issuer_number, @region_number, @sex, @birthday, @birthmonth, @birthyear, @_unique_number) AS result',N'@issuer_number int,@region_number int,@sex Y>bit,@birthday int,@birthmonth int,@birthyear int,@_unique_number real',@issuer_number=964390,@region_number=39,@sex=1,@birthday=1,@birthmonth=3,@birthyear=2009,@_unique_number=137 Y>Сервер возвращает null, хотя мне всего-то нужно, чтобы он вместо переменных подставил значения и вернул код. Y>Впрочем тут уже ручками быстрее написать.
Синтаксис, вроде, правильный, проблема скорее вего не в SQL а в C#.
Хотя вызывать это из C# можно удобнее:
Здравствуйте, vmpire, Вы писали:
V>Здравствуйте, ydabkaa, Вы писали:
Y>>Программа отправляет серверу вот это: Y>>exec sp_executesql N'SELECT dbo.Get_SocialNumber(@issuer_number, @region_number, @sex, @birthday, @birthmonth, @birthyear, @_unique_number) AS result',N'@issuer_number int,@region_number int,@sex Y>>bit,@birthday int,@birthmonth int,@birthyear int,@_unique_number real',@issuer_number=964390,@region_number=39,@sex=1,@birthday=1,@birthmonth=3,@birthyear=2009,@_unique_number=137 Y>>Сервер возвращает null, хотя мне всего-то нужно, чтобы он вместо переменных подставил значения и вернул код. Y>>Впрочем тут уже ручками быстрее написать. V>Синтаксис, вроде, правильный, проблема скорее вего не в SQL а в C#. V>Хотя вызывать это из C# можно удобнее:
V>