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