web-dev-qa-db-fra.com

Comment puis-je récupérer une table d'une procédure stockée dans un datatable?

J'ai créé une procédure stockée afin de me retourner une table.

Quelque chose comme ça:

create procedure sp_returnTable
body of procedure
select * from table
end

Lorsque j'appelle cette procédure stockée sur le frontal, quel code dois-je écrire pour la récupérer dans un objet datatable?

J'ai écrit du code quelque chose comme ce qui suit. Je veux fondamentalement savoir récupérer et stocker la table dans un objet de datatable. Toutes mes requêtes sont en cours d'exécution, mais je ne sais pas comment extraire une table dans un datatable via une procédure stockée

DataTable dtable = new DataTable();
cmd.Connection = _CONN;

cmd.CommandText = SPNameOrQuery;
cmd.CommandType = CommandType.StoredProcedure;

SqlDataAdapter adp = new SqlDataAdapter(cmd);
OpenConnection();
adp.Fill(dtTable);
CloseConnection();

Ici, dans ce code, une commande a été liée au nom de la procédure stockée et à ses paramètres. Est-ce que cela va me retourner un datatable de la procédure stockée?

31
Shantanu Gupta
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);
    }
}

Modifié à partir de Exemple d'écoles Java

46
GrayWizardx

Définissez également CommandText et appelez Fill sur SqlAdapter pour récupérer les résultats dans 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);

(L’exemple utilise des constructeurs sans paramètre pour plus de clarté; il peut être raccourci en utilisant d’autres constructeurs.)

5
Andomar

Expliquer si quelqu'un veut envoyer des paramètres en appelant la procédure stockée comme ci-dessous,

using (SqlConnection con = new SqlConnection(connetionString))
            {
                using (var command = new SqlCommand(storedProcName, con))
                {
                    foreach (var item in sqlParams)
                    {
                        item.Direction = ParameterDirection.Input;
                        item.DbType = DbType.String;
                        command.Parameters.Add(item);
                    }
                    command.CommandType = CommandType.StoredProcedure;
                    using (var adapter = new SqlDataAdapter(command))
                    {
                        adapter.Fill(dt);
                    }
                }
            }
0
Rush.2707