我正在创建一个使用一个或多个参数执行查询的方法。
代码:
public static IEnumerable<T> ExecuteQueryWithParameters<T>(string Query, string ConnectionString, string[] ParametersArray, string[] ValuesArray)
{
using (MySqlConnection Connection= new MySqlConnection(ConnectionString))
{
using (var cmd = new MySqlCommand(Query, Connection))
{
for (int i = 0; i < ParametersArray.Length; i++)
{
cmd.Parameters.AddWithValue(ParametersArray[i], ValuesArray[i]);
}
Connection.Open();
return Connection.Query<T>(Query);
}
}
}
Tempsave
表格结构:
+------------------------------+
|Id|Localization|Items|Quantity|
+------------------------------+
工作原理:
调用时,该方法将接收4个参数:
query
(例如:SELECT * FROM TempSave WHERE Localization = @Localization
)server=localhost; database=wintestbeta;user=root; password=;
)@Parameter1
)然后它将创建一个名为MySqlConnection
的{{1}}类型的新变量,其中包含一个参数Connection
。
之后,它将创建另一个名为ConnectionString
的变量类型MySqlCommand
,其中包含两个参数,一个是查询,另一个是连接。
然后它将进入一个大小为cmd
长度的for循环,在for循环中它将向ParametersArray
添加一个新参数,其中包含两个参数cmd
和索引等于ParameterArray
,而i
的索引也等于ValueArray
。
然后它将打开一个连接并执行查询,它将从它将返回的查询中收到什么。
用于调试的代码:
i
问题:
到达
时执行代码IEnumerable<TempSave> _CheckTemp;
string Check_TempSave = "SELECT * FROM tempsave WHERE Localization=@Localization";
string[] Parameters = new string[] { "@Localization" };
string[] Values = new string[] { _Save.Localization };
_CheckTemp = SQL.ExecuteQueryWithParameters<TempSave>(Check_TempSave, SQL.ConnectionString, Parameters, Values);
并导致以下错误:
命令执行期间遇到致命错误。
调试时我检查过,参数和值都只有一个值:
return Connection.Query<T>(Query);
答案 0 :(得分:0)
我找到的解决方案是使用for循环而不是使用AddWithValue,而是将每个@Parameter替换为让方法如下所示的值:
public static IEnumerable<T> ExecuteQueryWithParameters<T>(string Query, string ConnectionString, string[] ParametersArray, string[] ValuesArray)
{
using (MySqlConnection Connection = new MySqlConnection(ConnectionString))
{
for (int i = 0; i < ParametersArray.Length; i++)
{
//Replace all @Parameters
Query = Query.Replace(ParametersArray[i], ValuesArray[i]);
}
Connection.Open();
return Connection.Query<T>(Query);
}
}
也许这不是最好的方法,但没有人回答我的问题,这是我唯一的解决方案。