如何从存储过程中获取值

时间:2013-05-22 17:45:07

标签: c# asp.net

我想知道如何获取存储过程的参数。我是ASP.Net C#的新手。这是我的存储过程。

ALTER procedure [dbo].[obtnCtUsuarios]
    ((@nombre nvarchar (20))
AS
    SELECT
        id, idEmpresa 
    FROM
        ctUsuarios 
    WHERE
        nombre = @nombre 
    ORDER BY
        idNombre DESC

我在这里收到错误,因为我不知道如何放置参数。

public List<ctUsuarios> select_ALL_ctUsuarios()
{
    List<ctUsuarios> LstctUsuarios = new List<ctUsuarios>();

    string storedProcedure = "obtnCtUsuarios";

    using (DbConnection con = Conexion.dpf.CreateConnection())
    {
        con.ConnectionString = Conexion.constr;

        using (DbCommand cmd = Conexion.dpf.CreateCommand())
        {
            cmd.Connection = con;
            cmd.CommandText = storedProcedure;
            cmd.CommandType = CommandType.StoredProcedure;

            con.Open();                   

            using (DbDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    LstctUsuarios.Add(
                            new ctUsuarios((int)dr["idUsuario"],
                                (string)dr["id"],
                                (string)dr["idEmpresa"]));
                }
            }
        }
    }

    return LstctUsuarios;
}

这是我的连接和我的ExecuteNonQuery

public class Conexion
{
    public Conexion()
    { }

    public static string constr
    {
        get { return ConfigurationManager.ConnectionStrings["Conn"].ConnectionString; }
    }

    //Cliente
    public static string Provider
    {
        get { return ConfigurationManager.ConnectionStrings["Conn"].ProviderName; }
    }

    public static DbProviderFactory dpf
    {
        get
        {
            return DbProviderFactories.GetFactory(Provider);
        }
    }

    private static int ejecutaNonQuery(string storedProcedure, List<DbParameter> parametros)
    {
        int Id = 0;

        try
        {
            using (DbConnection con = Conexion.dpf.CreateConnection())
            {
                con.ConnectionString = Conexion.constr;

                using (DbCommand cmd = Conexion.dpf.CreateCommand())
                {
                    cmd.Connection = con;
                    cmd.CommandText = storedProcedure;
                    cmd.CommandType = CommandType.StoredProcedure;

                    foreach (DbParameter param in parametros)
                        cmd.Parameters.Add(param);

                    con.Open();
                    Id = cmd.ExecuteNonQuery();
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            //conection.close();
        }

        return Id;
    }

有人可以帮助我获取参数吗? tHx

2 个答案:

答案 0 :(得分:3)

cmd.Parameters.AddWithValue("@nombre", value);

这是您向数据库命令添加参数的方法,这是我认为您要问的。

编辑:

using (DbConnection con = Conexion.dpf.CreateConnection())
{
    con.ConnectionString = Conexion.constr;

    using (DbCommand cmd = Conexion.dpf.CreateCommand())
    {
        cmd.Connection = con;
        cmd.CommandText = StoredProcedure;

        // here is good
        cmd.Parameters.AddWithValue("@nombre", yourParamValue);
        cmd.CommandType = CommandType.StoredProcedure;

        con.Open(); 

答案 1 :(得分:1)

cmd.Parameters.Add(literalFromSproc, SqlDbType.VarChar).Value =会做你想要的。如果说你的sproc中有一个名为@Name的param,你会做 - cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "evan";

还有类似AddWithValue的变体可以使用。查看文档here