aF.
aF.

Reputation: 66727

Execute stored procedure from Sybase ASE 15 and get DataSet using C#?

How do I execute a stored procedure from Sybase ASE 15 (using ODBC) and get DataSet using 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;
    }

Upvotes: 2

Views: 1201

Answers (1)

aF.
aF.

Reputation: 66727

The VerificaExpressao method only allowed selects.

Passed this:

        int idx = VerificaExpressao(query);

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

to this:

        cmdOdbc.ExecuteNonQuery();

and it's done :)

Upvotes: 1

Related Questions