我正在创建一种将使用一个或多个参数执行查询的方法。

码:

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创建一个名为ConnectionConnectionString类型的新变量。

之后,它将创建另一个名为MySqlCommand的变量类型cmd,该变量具有两个参数,一个是查询,另一个是连接。

然后它将进入一个长度为ParametersArray的for循环,在for循环内,它将向带有两个参数的cmd添加新参数,其中两个参数分别是索引等于ParameterArrayi和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/

10-10 03:23