[英]C# : Passing Parameters to a function via a 2d object array
我正在尝试编写一个简洁的通用Sql方法,该方法将接受SQL查询和参数列表,并返回结果。 我想保持它整洁,以至于可以使用其他任何代码中的一行来调用它。
有没有真的很棒的方法呢? 我不想在调用代码中创建所有SqlParameters,也不想传递和拆分字符串。 过去,我使用string []数组,并接受每个奇数成员作为参数名称,每个偶数作为参数值,但这在调用方法时很容易搞砸。
理想情况下,我很想这样做:
Data.SQL("Select * from Table where my_id = @my_id", { my_id = 1 });
我知道这有点不现实,所以我尝试了以下方法:
Data.SQL("Select * from Table where my_id = @my_id", new Object[,]{ { "my_id", 1 } });
但是,当我尝试在另一端进行处理时,除了麻烦之外,我什么也没有得到:
public static Object SQL(String command, Object[,] parameters = null){
[ ... reusable SQL code here... ]
foreach(Object[] p in parameters){
cmd.Parameters.Add(new SqlParameter(p[0].ToString(), p[1].ToString());
}
}
看起来不错,但在foreach语句上引发错误
foreach (Object[] p in parameters)
无法将类型为“ System.String”的对象转换为类型为“ System.Object []”的对象
但是我没有将其传递给System.String数组。 我通过的是2D System.Object []! 是不是
也许这只是一些小代码问题,但我做错了一些愚蠢的事情。 通常是这样。 但是我想你们知道做上述事情的一些更精巧的方法。
理想情况下,我很想这样做:
Data.SQL("Select * from Table where my_id = @my_id", { my_id = 1 });
我知道这有点不现实,
好吧, 正是以这种形式,是的……但是试试看:
Data.SQL("Select * from Table where my_id = @my_id", new { my_id = 1 });
这将对参数使用匿名类型 ,您可以通过反射进行检查。 您可能只需要一个参数(即它将是SQL(string sql, object parameters)
),因为您将在一个对象中传递多个参数:
Data.SQL("Select * from Table where my_id = @my_id and name = @name",
new { my_id = 1, name = "Jon" });
更多选择:
如Ray所述,您可以传入Dictionary<string, object>
; 再次,C#3使此操作比其他方法更容易:
Data.SQL("...", new Dictionary<string, object> { { "my_id", 1 }, { "name", "Jon" }});
编辑:至于您遇到的确切问题:您需要了解矩形数组(例如Object[,]
)和锯齿状数组(例如Object[][]
)之间的区别。 后者是一个数组数组,这就是您尝试使用该参数的方式,但实际上它只是一个矩形数组。 将参数类型更改为Object[][]
可能会解决当前的问题-但就我个人而言,我将转向上述方法之一。 顺便说一句,我也尽量避免将所有内容变成字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.