Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一般传递参数_C#_Sql_Parameters_Parameter Passing - Fatal编程技术网

C# 一般传递参数

C# 一般传递参数,c#,sql,parameters,parameter-passing,C#,Sql,Parameters,Parameter Passing,我想创建一个通用数据库类,这样我们的所有开发人员都可以通过导入数据库dll来遵循完全相同的语法。话虽如此,我还是有点纠结于如何完善这一部分。我需要找到一种方法通过这个方法传递未知数量的参数。我试着列一张单子,但似乎没有成功。另外,为了清楚起见,db.ValidateConnection(连接)部分只是确保连接尚未使用或打开,然后将其打开 要调用此方法: public static SqlDataReader ExecuteReader(string CommandName,

我想创建一个通用数据库类,这样我们的所有开发人员都可以通过导入数据库dll来遵循完全相同的语法。话虽如此,我还是有点纠结于如何完善这一部分。我需要找到一种方法通过这个方法传递未知数量的参数。我试着列一张单子,但似乎没有成功。另外,为了清楚起见,db.ValidateConnection(连接)部分只是确保连接尚未使用或打开,然后将其打开

要调用此方法:

public static SqlDataReader ExecuteReader(string CommandName, 
                                          SqlConnection Connection,
                                          PARAMETERS??!?!?)
{
    using (SqlCommand cmd = new SqlCommand(CommandName, Connection))
    {
        // Ensure we are executing a stored procedure.
        cmd.CommandType = CommandType.StoredProcedure;

        // Ensure our connection is not already open and then open it.
        db.ValidateConnection(Connection);

        // Return our SqlDataReader object with the desired execution results.
        return cmd.ExecuteReader();
    }
}
基于这种代码思想:

// Want to add these Parameters..//
    cmd.Parameters.AddWithValue("@Param0", Param0);
    cmd.Parameters.AddWithValue("@Param1", Param1);
    cmd.Parameters.AddWithValue("@Param2", Param2);

    // Or These Parameter...
    cmd.Parameters.AddWithValue("@Param2", Param2);

    // Or NO Parameters...

    // To this Execution statement.
    ExecuteReader(CommandName: "[MyStoredProcedure]",
                  Connection: "MyConnection",
                  PARAMTERS??!?!?!: "ListOfAllParametersToAttach")
--更新

最终工作代码!在我们的.dll中调用:

 public static SqlDataReader ExecuteReader(string CommandName,
                                          SqlConnection Connection,
                                          params SqlParameter[] Parameters)
{
    // ExecuteReader
    //
    // @CommandName string :
    //     Name of the stored procedure we are looking to execute.
    //
    // @Connection SqlConnection :
    //     SQL Connection to be used when executing the provided @CommandName.
    //
    // @Parameters params SqlParameter[] :
    //     If any parameters exist this will contain the list of we will attach to our SqlCommand.

    using (SqlCommand cmd = new SqlCommand(CommandName, Connection))
    {
        // Ensure we are executing a stored procedure.
        cmd.CommandType = CommandType.StoredProcedure;

        // Iterate through our list and add all required parameters.
        foreach (SqlParameter Parameter in Parameters)
        {
            cmd.Parameters.Add(Parameter);
        }

        // Ensure our connection is not already open and then open it.
        db.ValidateConnection(Connection);

        // Return our SqlDataReader object with the desired execution results.
        return cmd.ExecuteReader();
    }
}
从应用程序调用:

using (SqlDataReader dr = SMCConnect.ExecuteReader("[ProcedureName]",
                                                    con,
                                                    new SqlParameter("@ParameterName", ParameterName))) { }

在签名中使用
params[]KeyValuePair
,如下所示:

public static SqlDataReader ExecuteReader(string CommandName, 
                                      SqlConnection Connection,
                                      params[] KeyValuePair<string, object> parameters)
//...
foreach (var p in parameters)
   cmd.Parameters.Add(p.Key, p.Value)
//...
公共静态SqlDataReader ExecuteReader(字符串CommandName,
SqlConnection连接,
params[]KeyValuePair参数)
//...
foreach(参数中的var p)
cmd.Parameters.Add(p.Key,p.Value)
//...

在签名中使用
参数[]KeyValuePair
,如下所示:

public static SqlDataReader ExecuteReader(string CommandName, 
                                      SqlConnection Connection,
                                      params[] KeyValuePair<string, object> parameters)
//...
foreach (var p in parameters)
   cmd.Parameters.Add(p.Key, p.Value)
//...
公共静态SqlDataReader ExecuteReader(字符串CommandName,
SqlConnection连接,
params[]KeyValuePair参数)
//...
foreach(参数中的var p)
cmd.Parameters.Add(p.Key,p.Value)
//...

我会使用
参数SqlParameter[]
。称为“可变长度参数”或

用例:

ExecuteReader("MyStoredProcedure",myConnection,new SqlParameter("@param1",value1),new SqlParameter("@param2",value2),...);

我会使用
参数SqlParameter[]
。称为“可变长度参数”或

用例:

ExecuteReader("MyStoredProcedure",myConnection,new SqlParameter("@param1",value1),new SqlParameter("@param2",value2),...);

也许是这个?
Type[]
对你有用吗?也许是这个?
Type[]
对您有用吗?使用字典也是一个选项,但是我会迭代条目而不是键,然后获取值使用字典也是一个选项,但是我会迭代条目而不是键,然后获取值好的,那么,用什么来传递这些参数呢?在dictionary中可以执行以下操作:dictionary参数=newdictionary();参数。添加(“@Param1”,Param1);好的,那么要用什么来传递这些参数呢?在dictionary中可以执行以下操作:dictionary参数=newdictionary();参数。添加(“@Param1”,Param1);
ExecuteReader("MyStoredProcedure",myConnection,new SqlParameter("@param1",value1),new SqlParameter("@param2",value2),...);