Reputation: 66727
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
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