c# - 使用无名参数执行存储过程

标签 c# sql sql-server stored-procedures parameters

我只是想知道是否有一种方法可以在不命名参数的情况下执行存储过程。这意味着 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/

相关文章:

c# - 如何在表单中心设置 FlowLayoutPanel 内容

c# - EF 迁移显示空的 Up() Down() 方法

php - 从日期字段中选择特定数据

sql - postgresql - 选择 4 列,其中 1 列需要过滤

Java/SQL Server 2008 R2 Express 连接问题

java - 将用 Java 编写的枚举转换为 C#

c# - SQL Server 中的 orderby json 字段

sql - 将表分区真正受益的大小(行数)是多少?

c# - 跟踪 MSSQL 2008 表更改,最好的方法是什么?

sql-server - 从存储过程返回错误消息