我只是想知道是否有一种方法可以在不命名参数的情况下执行存储过程。这意味着 C# 按照参数在存储过程中声明的顺序解析参数。
public static DataTable GetRelatedResources(string StoredProcedure, object[] Parameters)
{
var Results = new DataTable();
try
{
using (SqlConnection conn = new SqlConnection())
{
using (SqlCommand cmd = new SqlCommand(ConfigurationManager.ConnectionStrings["MK3Entities"].ConnectionString))
{
conn.Open();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = StoredProcedure;
if (Parameters!= null)
{
foreach(var Param in Parameters)
{
// I Want To Do something like this
cmd.Parameters.AddWithValue(Param);
}
}
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(Results);
}
}
}
catch (Exception ex)
{
MMSLogger.Instance.WriteToLog("Exception Executing Stored Procedure:" + ex.Message);
}
return Results;
}
最佳答案
改为执行命令,并传入参数“@p1”、“@p2”等:
cmd.CommandType = CommandType.Text;
cmd.CommandText = 'exec ' + StoredProcedure;
int i=0;
string comma = ' ';
foreach(var Param in Parameters)
{
var paramName = String.Format("@P{0}", i);
cmd.CommandText += comma + paramName;
cmd.Parameters.AddWithValue(paramName, Param);
++i;
comma = ', ';
}
请注意 AddwithValue
是一个巨大的性能反模式。参见 How Data Access Code Affects Database Performance
关于c# - 使用无名参数执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26611165/