На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> stored procedure & C# & Sybase
    ExpandedWrap disabled
      System.Data.Odbc.OdbcConnection cnStr = new
      System.Data.Odbc.OdbcConnection();
      cnStr.ConnectionString = "dsn=testodb";
      cnStr.Open();
      System.Data.Odbc.OdbcCommand cmdStr = new System.Data.Odbc.OdbcCommand();
      cmdStr.Connection = cnStr;
      cmdStr.CommandType = CommandType.StoredProcedure;
      cmdStr.CommandText = "branch.ex2008_test";
       
      System.Data.Odbc.OdbcParameter param = new System.Data.Odbc.OdbcParameter();
      param.ParameterName = "a1";
      param.OdbcType = System.Data.Odbc.OdbcType.Int;
      param.Value = 2;
      param.Direction = ParameterDirection.Input;
       
      cmdStr.Parameters.Add(param);
      cmdStr.ExecuteNonQuery();



    Почему при роботе ошибочка неверное количество параметров.

    Процедура елементарна ?


    ExpandedWrap disabled
      create procedure branch.ex2008_test (IN a1 int)
      begin
      insert into branch.test(p1)
      values (1);
      end;

    M
    Используем теги оформления кода
      Попробуй заменить param.ParameterName = "a1"; на param.ParameterName = "?";

      P.S или param.ParameterName = "@a1";
      Сообщение отредактировано: juice -
        Цитата juice @
        Попробуй заменить param.ParameterName = "a1"; на param.ParameterName = "?";

        P.S или param.ParameterName = "@a1";

        не помогло
          kucher, может лучше использовать не Odbc провайдер, а поискать что-то спечифическое для Sybase ?

          Добавлено
          http://www.google.com.ua/search?q=Sybase+.NET+provider&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a
            Кажись я понял в чем проблема.

            Sysbase при работе через ODBC драйвер требует задание вызова хранимой процедуры через щаблон следующего вида:
            "{?=call name_stored_procedure (?, ?, ?, ?, ?, ?, ?)}"

            в коде выше вызывается хранимая процедура name_stored_procedure с семью input парамметрами и одним return value

            поэтому строку с указанием хранимой процедуры нужно переписать так:

            cmdStr.CommandText = "{call branch.ex2008_test (?)}";

            если парамметров много то добавлять их следует в соответствующем порядке.
            Сообщение отредактировано: juice -
              cmdStr.CommandText = "{call branch.ex2008_test (?)}";

              то что надо спасибо.

              Паралельно другой вопрос.

              База аналогичная от Sybase через ODBC, если бить точним то Sybase SQL Anywhere 5.5
              При использовании мастера для DataSet в диалоге для вибора database object можна вибрать только таблици, view, а список процедур и функций пуст почему?
                Цитата kucher @
                а список процедур и функций пуст почему?
                - потому что DataSet строится на результатах выполнения запросов к базе, а хранимые процедуры и функции не всегда возвращают кортежи записей.
                  Цитата PIL @
                  Цитата kucher @
                  а список процедур и функций пуст почему?
                  - потому что DataSet строится на результатах выполнения запросов к базе, а хранимые процедуры и функции не всегда возвращают кортежи записей.

                  Я думаю ти не совсем прав
                  По моему сначала мастер должен показать хотя би список процедур а после вибора одной из них сормировать правильную sql команду хотя би для аргументов а потом анализировать возвращаемие записи.
                    Цитата kucher @
                    Я думаю ти не совсем прав
                    -
                    логика проста: процедура может возвращать либо результаты выборки, либо скалярное значение, либо значения в out переменных. Либо все сразу или в вариациях. Компания Майкрософт решила не писать всякие сложные синтаксические анализаторы, учитывать диалекты синтаксиса SQL разных баз данных и т д, а сделала как можно проще - таблица или вид.
                    Можешь выдвинуть им свою претензию
                      Цитата PIL @
                      Цитата kucher @
                      Я думаю ти не совсем прав
                      -
                      логика проста: процедура может возвращать либо результаты выборки, либо скалярное значение, либо значения в out переменных. Либо все сразу или в вариациях. Компания Майкрософт решила не писать всякие сложные синтаксические анализаторы, учитывать диалекты синтаксиса SQL разных баз данных и т д, а сделала как можно проще - таблица или вид.
                      Можешь выдвинуть им свою претензию

                      С SQl серверами от Мicrosoft аналогичная проблема или там все OK?
                        Цитата kucher @
                        С SQl серверами от Мicrosoft аналогичная проблема или там все OK?
                        - я очень редко пользуюсь мастерами, чаще пишу код руками - соверую посмотреть самому.
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0292 ]   [ 16 queries used ]   [ Generated: 7.05.24, 06:37 GMT ]