Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 18.03.09 13:39
Оценка:
Делаю проект, в нем из БД вызываются некоторые функции(возвращают string).
В TableDataAdapter делаю метод, который вызывает функцию, метод внутри программы возвращает null(должен вернуть строчку).
На сервере и в просмотре данных работает как надо.

Написал SqlCommand с вызовом этой функции, при выполнении возникает Exception — не встроенная процедура не найдена(трассировка в sql server показывает, что всё хорошо).
БД крутится на локальной машине, проблем с ограничением прав нет.

При этом из этой же базы спокойно заполняются комбобоксы(через dataset).

Что с этим делать?
Re: Проблема с вызовом процедур из БД
От: vmpire Россия  
Дата: 18.03.09 13:49
Оценка:
Здравствуйте, ydabkaa, Вы писали:

Y>Делаю проект, в нем из БД вызываются некоторые функции(возвращают string).

Функции или процедуры?

Y>В TableDataAdapter делаю метод, который вызывает функцию, метод внутри программы возвращает null(должен вернуть строчку).

А как именно Вы вызываете функции?

Y>На сервере и в просмотре данных работает как надо.


Y>Написал SqlCommand с вызовом этой функции, при выполнении возникает Exception — не встроенная процедура не найдена(трассировка в sql server показывает, что всё хорошо).

"не встроенная": "не" — это опечатка?

Y>БД крутится на локальной машине, проблем с ограничением прав нет.


Y>При этом из этой же базы спокойно заполняются комбобоксы(через dataset).

Y>Что с этим делать?
Показать код, для начала. Телепаты так и не вернулись с праздников.
Re[2]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 18.03.09 14:08
Оценка:
1.Функции.

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);
Re[4]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 18.03.09 14:30
Оценка:
А>

А>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>Без разницы — одинаково хорошо не работает

А Вы профайлером смотрели, какой запрос посылается в БД???
Re[3]: Проблема с вызовом процедур из БД
От: vmpire Россия  
Дата: 18.03.09 14:38
Оценка:
Здравствуйте, 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`ы.

Именно тот код, который Вы привели.
Re[5]: Проблема с вызовом процедур из БД
От: mrjeka Россия  
Дата: 18.03.09 14:42
Оценка:
Здравствуйте, ydabkaa, Вы писали:

А>>

А>>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.
Re[4]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 18.03.09 15:26
Оценка:
V>... но в этом случае CommandType должен быть CommandType.Text
Спасибо, первый метод заработал.
Пока проблемы с теми методами, которые принимают переменные
Re[6]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 18.03.09 15:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ydabkaa, Вы писали:


А>>>

А>>>SqlCommand get_pers_code = new SqlCommand("SELECT [dbo].[Get_new_perscode] ()", new //Select не нужен, пишется просто имя процедуры

А>>>new SqlCommand("Get_new_perscode", sqlConnection);

А>>>

Y>>Без разницы — одинаково хорошо не работает

А>А Вы профайлером смотрели, какой запрос посылается в БД???

Этот же и посылается.
С первым методом уже всё ок.
Неправильно передает во второй метод =(
Буду думать.
Re[5]: Проблема с вызовом процедур из БД
От: vmpire Россия  
Дата: 18.03.09 15:49
Оценка:
Здравствуйте, ydabkaa, Вы писали:

V>>... но в этом случае CommandType должен быть CommandType.Text

Y>Спасибо, первый метод заработал.
Y>Пока проблемы с теми методами, которые принимают переменные
Какие проблемы? Пишите — порешаем. Только код приводите, чтобы не гадать.
Re[6]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 19.03.09 09:01
Оценка:
Здравствуйте, 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, хотя мне всего-то нужно, чтобы он вместо переменных подставил значения и вернул код.
Впрочем тут уже ручками быстрее написать.
Re[7]: Проблема с вызовом процедур из БД
От: vmpire Россия  
Дата: 19.03.09 09:50
Оценка:
Здравствуйте, 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# можно удобнее:

DbCommand cmd = new SqlCommand(
"SELECT dbo.Get_SocialNumber(@issuer_number, @region_number, @sex, @birthday, @birthmonth, @birthyear, @_unique_number)",
connection));
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add(new SqlParameter("@issuer_number", 123));
cmd.Parameters.Add(new SqlParameter("@region_number", 456));
cmd.Parameters.Add(new SqlParameter("@sex", true));
cmd.Parameters.Add(new SqlParameter("@birthday", DateTime.Now));
cmd.Parameters.Add(new SqlParameter("@birthmonth", 11));
cmd.Parameters.Add(new SqlParameter("@birthyear", 1917));
cmd.Parameters.Add(new SqlParameter("@_unique_number", 789));
ovject result = cmd.ExecuteNoQuery();
Re[8]: Проблема с вызовом процедур из БД
От: ydabkaa  
Дата: 19.03.09 11:18
Оценка:
Здравствуйте, 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>
V>DbCommand cmd = new SqlCommand(
V>"SELECT dbo.Get_SocialNumber(@issuer_number, @region_number, @sex, @birthday, @birthmonth, @birthyear, @_unique_number)",
V>connection));
V>cmd.CommandType = CommandType.Text;
V>cmd.Parameters.Add(new SqlParameter("@issuer_number", 123));
V>cmd.Parameters.Add(new SqlParameter("@region_number", 456));
V>cmd.Parameters.Add(new SqlParameter("@sex", true));
V>cmd.Parameters.Add(new SqlParameter("@birthday", DateTime.Now));
V>cmd.Parameters.Add(new SqlParameter("@birthmonth", 11));
V>cmd.Parameters.Add(new SqlParameter("@birthyear", 1917));
V>cmd.Parameters.Add(new SqlParameter("@_unique_number", 789));
V>ovject result = cmd.ExecuteNoQuery();

V>


Да,к этому в итоге и пришел.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.