web-dev-qa-db-fra.com

Renvoyer le résultat d'une requête de sélection dans une procédure stockée à une liste

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.

25
muttley91

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. :)

34
Hitesh
 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();
3
Vinay Kumrawat
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();
2
Susanna Floora

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()
0
Shane

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();
0
Anthony Griggs