J'écris une procédure stockée qui contient actuellement seulement une requête SELECT
. Il sera étendu à un certain nombre d'autres choses, c'est pourquoi il doit s'agir d'une procédure stockée, mais pour l'instant, il s'agit d'une requête simple.
Quelque chose comme ça:
SELECT name, occupation, position
FROM jobs
WHERE ...
Je cherche à renvoyer les résultats de cette requête à utiliser en C #. Je souhaite l'ajouter à une liste afin de pouvoir le lier à un composant GridView.
Je ne sais pas comment s'y prendre, cependant. Si je dois l'insérer dans une liste après avoir renvoyé toutes les données sélectionnées, tout va bien, je dois juste savoir comment renvoyer correctement les données pour pouvoir le faire.
Si je peux le renvoyer dans un format pouvant être inséré directement dans une liste, ce serait l'idéal.
En procédure stockée, il vous suffit d'écrire la requête select comme ci-dessous:
CREATE PROCEDURE TestProcedure
AS
BEGIN
SELECT ID, Name
FROM Test
END
Côté C #, vous pouvez accéder à l’aide de Reader, datatable, adapter.
Utilisation de l'adaptateur vient d'être expliqué par Susanna Floora.
Utilisation de Reader:
SqlConnection connection = new SqlConnection(ConnectionString);
command = new SqlCommand("TestProcedure", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
List<Test> TestList = new List<Test>();
Test test = null;
while (reader.Read())
{
test = new Test();
test.ID = int.Parse(reader["ID"].ToString());
test.Name = reader["Name"].ToString();
TestList.Add(test);
}
gvGrid.DataSource = TestList;
gvGrid.DataBind();
Utiliser dataTable:
SqlConnection connection = new SqlConnection(ConnectionString);
command = new SqlCommand("TestProcedure", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
DataTable dt = new DataTable();
dt.Load(command.ExecuteReader());
gvGrid.DataSource = dt;
gvGrid.DataBind();
J'espère que cela vous aidera. :)
SqlConnection connection = new SqlConnection(ConnectionString);
command = new SqlCommand("TestProcedure", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
DataTable dt = new DataTable();
dt.Load(command.ExecuteReader());
gvGrid.DataSource = dt;
gvGrid.DataBind();
SqlConnection con = new SqlConnection("Data Source=DShp;Initial Catalog=abc;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("data", con);
da.SelectCommand.CommandType= CommandType.StoredProcedure;
DataSet ds=new DataSet();
da.Fill(ds, "data");
GridView1.DataSource = ds.Tables["data"];
GridView1.DataBind();
J'ai eu la même question, cela m'a pris des siècles pour trouver une solution simple.
Utilisation de ASP.NET MVC 5 et EF 6:
Lorsque vous ajoutez une procédure stockée à votre modèle .edmx
, le résultat de la procédure stockée est transmis via un objet généré automatiquement appelé yourStoredProcName_result
.
Cet objet _result
contient les attributs correspondant aux colonnes de la base de données sélectionnées par votre procédure stockée.
La classe _result
peut être simplement convertie en une liste:
yourStoredProcName_result.ToList()
Vous avez des paramètres?
SqlConnection conn = new SqlConnection(func.internalConnection);
var cmd = new SqlCommand("usp_CustomerPortalOrderDetails", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@CustomerId", SqlDbType.Int).Value = customerId;
cmd.Parameters.Add("@Qid", SqlDbType.VarChar).Value = qid;
conn.Open();
// Populate Production Panels
DataTable listCustomerJobDetails = new DataTable();
listCustomerJobDetails.Load(cmd.ExecuteReader());
conn.Close();