C# 如何从执行需要参数的存储过程中获取列表?

C# 如何从执行需要参数的存储过程中获取列表?,c#,sql-server,asp.net-mvc,dapper,C#,Sql Server,Asp.net Mvc,Dapper,有人能告诉我这样做的语法吗?我在上面找不到任何东西 以下是我目前掌握的情况: using (con = new SqlConnection(connectionString)) { DynamicParameters param = new DynamicParameters(); Debug.WriteLine(Int32.Parse(ConfigurationManager.AppSettings["max-files-limit"])); param.Add("@N

有人能告诉我这样做的语法吗?我在上面找不到任何东西

以下是我目前掌握的情况:

using (con = new SqlConnection(connectionString))
{
    DynamicParameters param = new DynamicParameters();
    Debug.WriteLine(Int32.Parse(ConfigurationManager.AppSettings["max-files-limit"]));
    param.Add("@NumOfFiles", Int32.Parse(ConfigurationManager.AppSettings["max-files-limit"]));
    con.Open();
    IList<AsyncFileProcessingQueue> fileList = SqlMapper.Query<AsyncFileProcessingQueue>(con, "GetMostRecentFileStatus", param).ToList();
    return fileList.ToList();
}
GetMostRecentFileStatus
是一个存储过程。我不知道这是否是问题所在。但我在想,也许它不知道我在使用存储过程

我看到了这样一个例子

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<int>("@c"); 
CREATE PROCEDURE GetMostRecentFileStatus
(
    @NumOfFiles INT
)
AS
BEGIN
SELECT TOP (@NumOfFiles) Filename, Status
FROM AsyncFileProcessingQueue
ORDER BY UpdatedDate DESC
END

确保使用查询方法传递参数

这应该管用

int numberOfFiles=2;
var q = @"exec GetMostRecentFileStatus @NumOfFiles";
using (con = new SqlConnection(connectionString))
{
    return con.Query<YourFileTypeDto>(q, new { @NumOfFiles=numberOfFiles }).ToList();
}
int numberOfFiles=2;
var q=@“exec GetMostRecentFileStatus@numofiles”;
使用(con=newsqlconnection(connectionString))
{
返回con.Query(q,new{@numofiles=numberOfFiles}).ToList();
}

您可以将
numberOfFiles
变量的硬编码值替换为方法的argumenet值/从某处读取

static Tortuga.Chain.SqlServerDataSource DS = new Tortuga.Chain.SqlServerDataSource (connectionString);

var fileCount = int.Parse(ConfigurationManager.AppSettings["max-files-limit"]);
var fileList = DS.Procedure("GetMostRecentFileStatus", new { @NumOfFiles =  fileCount }).ToCollection<AsyncFileProcessingQueue>().Execute();
static Tortuga.Chain.SqlServerDataSource DS=new Tortuga.Chain.SqlServerDataSource(connectionString);
var fileCount=int.Parse(ConfigurationManager.AppSettings[“最大文件限制”]);
var fileList=DS.Procedure(“GetMostRecentFileStatus”,new{@numofiles=fileCount}).ToCollection().Execute();
这应该可以:

int numFiles = ...
var list = connection.Query<SomeType>(
      "GetMostRecentFileStatus",
      new { NumberOfFiles = numFiles },
     commandType:CommandType.StoredProcedure).AsList();
int numFiles=。。。
var list=connection.Query(
“GetMostRecentFileStatus”,
新的{NumberOfFiles=numFiles},
commandType:commandType.StoredProcess).AsList();

Mmm,我会试试,那么动态参数是如何工作的呢?我认为动态参数本身就是一个参数对象:(您要传递的第二个参数是一个带有参数名/values.Mmmm的注释性对象,它在ToList()处失败,说“int不包含ToList()的定义”,并且没有扩展方法“ToList()”抱歉!试试这个版本。我终于找到了。我需要commandType=StoredProcedure。
返回con.Query(“GetMostRecentFileStatus”,new{numofiles=limit},commandType:commandType.StoredProcedure)。ToList();
谢谢你的帮助,但不幸的是,我没有使用Tortuga-Chain atm:(
int numFiles = ...
var list = connection.Query<SomeType>(
      "GetMostRecentFileStatus",
      new { NumberOfFiles = numFiles },
     commandType:CommandType.StoredProcedure).AsList();