Как получить таблицу из хранимой процедуры в datatable?
Я создал хранимую процедуру, чтобы вернуть мне таблицу.
Что-то вроде этого:
create procedure sp_returnTable
body of procedure
select * from table
end
Когда я вызываю эту хранимую процедуру во внешнем интерфейсе, какой код мне нужно записать, чтобы получить его в объекте с данными?
Я написал код что-то вроде следующего. Я в основном хочу знать, как извлекать и хранить таблицу в объект данных. Все мои запросы запущены, но я не знаю, как получить таблицу в виде данных через хранимую процедуру.
DataTable dtable = new DataTable();
cmd.Connection = _CONN;
cmd.CommandText = SPNameOrQuery;
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
OpenConnection();
adp.Fill(dtTable);
CloseConnection();
Здесь в этом коде команда связана с именем хранимой процедуры и ее параметрами. Будет ли он возвращать мне данные, хранящиеся в хранимой процедуре?
Ответы
Ответ 1
string connString = "<your connection string>";
string sql = "name of your sp";
using(SqlConnection conn = new SqlConnection(connString))
{
try
{
using(SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = new SqlCommand(sql, conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataSet ds = new DataSet();
da.Fill(ds, "result_name");
DataTable dt = ds.Tables["result_name"];
foreach (DataRow row in dt.Rows) {
//manipulate your data
}
}
}
catch(SQLException ex)
{
Console.WriteLine("SQL Error: " + ex.Message);
}
catch(Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
}
Изменено из Пример Java Schools
Ответ 2
Также установите CommandText
и вызовите Fill
на SqlAdapter
, чтобы получить результаты в DataSet
:
var con = new SqlConnection();
con.ConnectionString = "connection string";
var com = new SqlCommand();
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "sp_returnTable";
var adapt = new SqlDataAdapter();
adapt.SelectCommand = com;
var dataset = new DataSet();
adapt.Fill(dataset);
(Например, для ясности можно использовать конструкторы без параметров), можно сократить с помощью других конструкторов.)