簡體   English   中英

MySQL執行帶參數的查詢后導致致命錯誤

[英]MySQL causing fatal error after executing query with parameters

我正在創建一種將使用一個或多個參數執行查詢的方法。

碼:

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個參數:

  1. query (例如: SELECT * FROM TempSave WHERE Localization = @Localization
  2. 連接字符串(例如: server=localhost; database=wintestbeta;user=root; password=;
  3. 包含一個或多個參數的字符串數組(它們看起來像這樣: @Parameter1
  4. 包含一個或多個值的字符串數組

然后,它會創建一個類型的新變量MySqlConnection稱為Connection有一個參數,即ConnectionString

之后,它將創建另一個名為cmd變量類型MySqlCommand ,該變量具有兩個參數,一個是查詢,另一個是連接。

然后,它會進入一個for循環與大小ParametersArray長度,內部的for循環,將添加一個新的參數,以cmd與兩個參數, ParameterArray具有索引等於iValueArray具有索引也等於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);

並導致以下錯誤:

命令執行期間遇到致命錯誤。

調試時,我檢查了參數和值是否只有一個值,即:

@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);
        }
    }

也許這不是最好的方法,但是沒人回答我的問題,這是我唯一的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM