Лучший / правильный способ вызова хранимой процедуры Informix с помощью команды ADO.Net? - PullRequest
2 голосов
/ 13 декабря 2011

У меня есть база данных Informix, которая предоставляет некоторые хранимые процедуры, у меня есть абстрагированный метод доступа к данным, который обрабатывает связь с ними, но у меня проблема с нулевым значением.

Прямо вы можете позвонить:

execute procedure some_stored_procedure(1,2,NULL,3)

и верните правильные результаты, я бы предпочел, чтобы это поле не обнулялось, но оно не в моих руках. Во всяком случае, я изначально пытался назвать это так:

var command = connection.CreateCommand();
command.CommandType = CommandTypes.StoredProcedure
command.CommandText = "some_stored_procedure"
// Pass in the parameters

Однако это приводит к тому, что Informix выдает синтаксическую ошибку, поэтому вместо этого я был вынужден использовать:

var command = connection.CreateCommand();
command.CommandText = "execute procedure some_stored_procedure(?,?,?,?)";
// Pass in parameters

Что работает, но никогда не возвращает правильные результаты, и если я попытаюсь сделать параметр 3 пустым, это вызовет еще одну синтаксическую ошибку. Я что-то упустил или есть лучший способ вызвать эти хранимые процедуры?

Ответы [ 3 ]

1 голос
/ 13 декабря 2011

попробуйте параметризовать параметры (вы можете использовать OdbcParameters при работе с odbcdriver) и затем передать DbNull.Value, где требуется Null.

Попробуйте это:

var command = connection.CreateCommand(); 
command.CommandType = CommandTypes.Text;
command.CommandText = "call some_stored_procedure(?,?,?,?)";

command.Parameters.Add(param); //add all your parameters.
0 голосов
/ 18 января 2016

Если вы используете соединение ODBC, при использовании CommandType.StoredProcedure вы должны использовать другой синтаксис для имени процедуры. В вашем случае:

CommandText = "{ CALL some_stored_procedure(?,?,?,?)}"

Проверьте эту ссылку для получения дополнительной информации: https://support.microsoft.com/en-us/kb/310130

0 голосов
/ 08 августа 2014

Отформатируйте запрос следующим образом:

        strQuery = string.Format("EXECUTE PROCEDURE Cronos_UpdateStateLegacyProduct ({0})", oValidityProducts.PurchaseId);

        OdbcConnection oConnection = new OdbcConnection(this.strConnectionString);
        OdbcCommand oCommand = new OdbcCommand();
        oCommand.CommandType = CommandType.StoredProcedure;
        oCommand.CommandText = strQuery;
        oCommand.Connection = oConnection;

        oConnection.Open();

        intResult = oCommand.ExecuteNonQuery();

С наилучшими пожеланиями

...