2 / 2 / 6
Регистрация: 04.05.2012
Сообщений: 62
1

Как передать параметр в хранимую процедуру с типом nvarchar

15.05.2012, 19:58. Показов 2443. Ответов 3
Метки нет (Все метки)

Добрый день! Есть хранимая процедура

SQL
1
2
3
4
5
6
ALTER PROCEDURE [dbo].[Idpolan]
@name_sotr nvarchar(50)
AS
BEGIN
  SELECT id FROM sotrudniki WHERE lan_ima = @name_sotr
END
И есть обращение к хранимой процедуре

C#
1
2
3
4
5
6
7
8
9
10
11
12
public int GetName(string name)
        {
            int id=0;
           
         using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand com = new SqlCommand("Idpolan", con);
                com.CommandType = System.Data.CommandType.StoredProcedure;
                SqlParameter param = new SqlParameter("@name_sotr", name);
                param.SqlDbType = System.Data.SqlDbType.Int;
                param.Direction = System.Data.ParameterDirection.Input;
          ...
Проблема в том, что из C# передаю переменную name типа string а в хранимой процедуре параметр имеет тип nvarchar(50) и поэтому запрос мне выдает пустое значение. Подскажите пожалуйста как можно добиться того, чтобы типы были сопоставимы?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2012, 19:58
Ответы с готовыми решениями:

Как можно вызвать хранимую процедуру и при вызове передать ей параметр
ASP.NET C# вопрос: Есть веб-приложение, на странице содержится GridView с подключённой базой...

Как передать табличную переменную в хранимую процедуру
Подскажите пожалуйста как передать табличную переменную в сохранённую процедуру в MS SQL Server???...

Как передать имя таблицы параметром в хранимую процедуру
Здравствуйте! Подскажите, пожалуйста, каким должен быть правильный синтаксис хранимой процедуры...

Как передать переменное число параметров в хранимую процедуру?
Уважаемые, Может кто знает как передать переменное колличество параметров в хранимую процедуру на...

3
Эксперт Java
4077 / 3811 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
15.05.2012, 20:04 2
Вот здесь можно посмотреть сопоставление типов CLR и MSSQL Server`а. Напротив nvarchar стоит string. Скорее всего дело не просто в неправильном типе.
На всякий случай попробуйте использовать один из sql типов: SqlChars или SqlString.
А процедура куда-то записывает результаты запроса? Или просто его выполняет?
0
2 / 2 / 6
Регистрация: 04.05.2012
Сообщений: 62
15.05.2012, 20:24  [ТС] 3
Выложу полностью, может и здесь что-то не так написал.
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
public int GetName(string name)
        {
            int id=0;        
            using (SqlConnection con = new SqlConnection(connectionString))
            {
                SqlCommand com = new SqlCommand("Idpolan", con);
                com.CommandType = System.Data.CommandType.StoredProcedure;
                SqlParameter param = new SqlParameter("@name_sotr", name);
                param.SqlDbType = System.Data.SqlDbType.Int;
                param.Direction = System.Data.ParameterDirection.Input;
                com.Parameters.Add(param);
                try
                {
                    con.Open();
                    SqlDataReader dr = com.ExecuteReader();
 
                    if (dr.HasRows)
                        foreach (DbDataRecord result in dr)
                          id = result.GetInt32(0);
                }
                catch
                {
 
                }
 
            }
            return id;
        }
Потом при проверке, получаемый id вставляю в textbox. Он выдает значение 0. Пробовал через
SqlString nam = new SqlString(name); и пробовал SqlChars nam = new SqlChars(name); при этом при передаче менял переменную name на nam. Эффект тот же.
0
Эксперт Java
4077 / 3811 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
15.05.2012, 20:49 4
Может я чего не знаю, о mssql процедурах, но если вы запускаете Command через ExecuteReader, то там должен быть именно запрос, а не процедура.
Читайте про то как вернуть результаты запроса из процедуры.

И уберите пустой catch, себе же больше проблем делаете, чем решаете.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2012, 20:49

PHP + MS SQL. Как передать параметры в хранимую процедуру?
Как передать из PHP значения параметров для хранимой процедуры в MS SQL Server перед ее выполнением?

Как передать в хранимую процедуру в MSSQL 2000 массив данных?
Есть нужда передать в качестве входного параметра в хранимую процедуру массив данных. Есть ли...

Как передать REST API параметр с типом Integer
При обращении с REST API Битрикс24 из php нужно передать параметр TASKID Если делаю через cURL ...

Как в процедуру 1 передать адрес процедуры 2 через параметр чтобы процедура 1 выполнила процедуру 2
Зачем мне это нужно? Затем что написан вложеный цикл от 0 до N в нём цикл от 0 до M, в программе...


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

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

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