【发布时间】:2016-03-10 05:54:26
【问题描述】:
我正在尝试一些新的东西(至少对我而言),而不是使用特定的函数来调用单个存储过程(数据访问函数与存储过程的比率为 1 比 1),我正在尝试编写传递存储过程名称的通用函数,以及作为参数的参数名称和参数值的字符串数组。
例如:
public DataTable CallQuery(string spName, string[] paramNames, string[] paramValues, string connString)
{
DataTable dt = new DataTable();
SqlConnection conn = new SqlConnection(connString);
try
{
//create a command and assign it to the passed stored procedure name
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn; // new SqlConnection(connString); ;
cmd.CommandText = spName;
//add any and all parameters to the command
for(int i = 0; i < paramNames.Length; i++)
{
SqlParameter temp = new SqlParameter(paramNames[i], paramValues[i]);
cmd.Parameters.Add(temp);
//cmd.Parameters.AddWithValue(paramNames[i], paramValues[i]);
}
//get the data and return it
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
return dt;
}
catch (Exception)
{
return dt;
}
}
不幸的是,由于某种原因,当我使用参数值(即 paramNames[0] = "@Provider" 和 paramValues[0] = "AT&T")调用此函数并进行数据库调用时,我发现异常说存储过程需要参数@Provider。
我已经逐步检查并验证了参数是否与它们的值一起添加,但我仍然遇到同样的异常。我在这里遗漏了一些简单的东西吗?
我传入字符串数组的原因是因为每个存储过程可能有 0 到 5 个参数(到目前为止...)。
【问题讨论】:
-
传递字典、哈希表或通用列表可能会更好,而不是独立数组,这样很容易将参数名称和值保持在一起。
-
这可能是有道理的,不是吗?在完成对应用程序逻辑的其余部分的测试后,我将对其进行更改。谢谢!
标签: c# sql-server