我正在创建一种将使用一个或多个参数执行查询的方法。
码:
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
创建一个名为Connection
的ConnectionString
类型的新变量。之后,它将创建另一个名为
MySqlCommand
的变量类型cmd
,该变量具有两个参数,一个是查询,另一个是连接。然后它将进入一个长度为
ParametersArray
的for循环,在for循环内,它将向带有两个参数的cmd
添加新参数,其中两个参数分别是索引等于ParameterArray
的i
和ValueArray的cc>。然后它将打开一个连接并执行查询,查询返回的内容将返回。
用于调试的代码:
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);
并导致以下错误:
命令执行期间遇到致命错误。
调试时,我检查了参数和值是否只有一个值,即:
@Localization
Counter,1
最佳答案
我找到的解决方案不是使用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);
}
}
也许这不是最好的方法,但是没人回答我的问题,这是我唯一的解决方案。
关于c# - MySQL执行带参数的查询后导致致命错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45797726/