Выполнить хранимую процедуру из Sybase ASE 15 и получить набор данных с помощью С#?

Как выполнить хранимую процедуру из Sybase ASE 15 (используя ODBC) и получить набор данных с помощью C#?


public static object GetDataSetOdbc(string conn, string query)
    {

        OdbcConnection ConexaoOdbc = new OdbcConnection(conn);
        ConexaoOdbc.ConnectionTimeout = 120;
        OdbcDataAdapter daOdbc;
        OdbcCommand cmdOdbc;
        DataSet dsResultado = new DataSet();
        bool exc = false;

        try
        {
            if (query != "")
            {
                cmdOdbc = new OdbcCommand(query, ConexaoOdbc);
                cmdOdbc.CommandType = CommandType.Text;
                daOdbc = new OdbcDataAdapter(cmdOdbc);


                ConexaoOdbc.Open();

                int idx = VerificaExpressao(query);

                if (idx < 0)
                    cmdOdbc.ExecuteNonQuery();
                else
                {
                    cmdOdbc.ExecuteScalar();
                }

                daOdbc.Fill(dsResultado, "result");

            }
            else
                ConexaoOdbc.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            exc = true;
        }
        finally
        {
            ConexaoOdbc.Close();
        }

        if (exc)
            return "";
        else
            return dsResultado;

    }

    private static int VerificaExpressao(string query)
    {
        int idx = query.IndexOf("Create", StringComparison.CurrentCultureIgnoreCase);

        if (idx == -1)
            idx = query.IndexOf("Drop", StringComparison.CurrentCultureIgnoreCase);

        if (idx == -1)
            idx = query.IndexOf("Alter", StringComparison.CurrentCultureIgnoreCase);

        if (idx == -1)
            idx = query.IndexOf("Insert", StringComparison.CurrentCultureIgnoreCase);

        if (idx == -1)
            idx = query.IndexOf("Update", StringComparison.CurrentCultureIgnoreCase);

        if (idx == -1)
            idx = query.IndexOf("Exec", StringComparison.CurrentCultureIgnoreCase);


        return idx;
    }

person aF.    schedule 25.05.2012    source источник
comment
mattgemmell.com/2008/12/08/what-have-you -пробовал   -  person Chris Shain    schedule 25.05.2012
comment
Что происходит, когда вы запускаете свой код? Какое-то исключение? Ничего?   -  person Chris Shain    schedule 25.05.2012
comment
@ChrisShain Решено! :) Я держу это здесь, чтобы люди знали, как это сделать.   -  person aF.    schedule 25.05.2012


Ответы (1)


VerificaExpressao method разрешено только selects.

Прошел это:

        int idx = VerificaExpressao(query);

        if (idx < 0)
            cmdOdbc.ExecuteNonQuery();
        else
        {
            cmdOdbc.ExecuteScalar();
        }

к этому:

        cmdOdbc.ExecuteNonQuery();

и дело сделано :)

person aF.    schedule 25.05.2012