C'est une question très simple.
J'essaie de renvoyer une table à partir d'une procédure stockée, comme
select * from emp where id=@id
Je veux retourner ce résultat de requête sous forme de tableau. Je dois le faire via une procédure stockée.
Où est ton problème ??
Pour la procédure stockée, créez simplement:
CREATE PROCEDURE dbo.ReadEmployees @EmpID INT
AS
SELECT * -- I would *strongly* recommend specifying the columns EXPLICITLY
FROM dbo.Emp
WHERE ID = @EmpID
C'est tout ce qu'il y a.
À partir de votre application ASP.NET, créez simplement un SqlConnection
et un SqlCommand
(n'oubliez pas de définir le CommandType = CommandType.StoredProcedure
)
DataTable tblEmployees = new DataTable();
using(SqlConnection _con = new SqlConnection("your-connection-string-here"))
using(SqlCommand _cmd = new SqlCommand("ReadEmployees", _con))
{
_cmd.CommandType = CommandType.StoredProcedure;
_cmd.Parameters.Add(new SqlParameter("@EmpID", SqlDbType.Int));
_cmd.Parameters["@EmpID"].Value = 42;
SqlDataAdapter _dap = new SqlDataAdapter(_cmd);
_dap.Fill(tblEmployees);
}
YourGridView.DataSource = tblEmployees;
YourGridView.DataBind();
puis remplissez par exemple un DataTable
avec ces données et le lier à par exemple une GridView.
Dans SQL Server 2008, vous pouvez utiliser
http://www.sommarskog.se/share_data.html#tableparam
ou bien simple et identique à l'exécution courante
CREATE PROCEDURE OrderSummary @MaxQuantity INT OUTPUT AS
SELECT Ord.EmployeeID, SummSales = SUM(OrDet.UnitPrice * OrDet.Quantity)
FROM Orders AS Ord
JOIN [Order Details] AS OrDet ON (Ord.OrderID = OrDet.OrderID)
GROUP BY Ord.EmployeeID
ORDER BY Ord.EmployeeID
SELECT @MaxQuantity = MAX(Quantity) FROM [Order Details]
RETURN (SELECT SUM(Quantity) FROM [Order Details])
GO
J'espère son aide pour vous
Il est TRÈS important d'inclure:
SET NOCOUNT ON;
dans SP, en première ligne, si vous faites INSERT
dans SP, le END SELECT
ne peut pas renvoyer de valeurs.
ALORS, en vb60, vous pouvez:
SET RS = CN.EXECUTE(SQL)
OU:
RS.OPEN CN, RS, SQL