![](/img/trans.png)
[英]Fatal error encountered during command execution while executing Mysql query
[英]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個參數:
query
(例如: SELECT * FROM TempSave WHERE Localization = @Localization
) server=localhost; database=wintestbeta;user=root; password=;
) @Parameter1
) 然后,它會創建一個類型的新變量MySqlConnection
稱為Connection
有一個參數,即ConnectionString
。
之后,它將創建另一個名為cmd
變量類型MySqlCommand
,該變量具有兩個參數,一個是查詢,另一個是連接。
然后,它會進入一個for循環與大小ParametersArray
長度,內部的for循環,將添加一個新的參數,以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);
並導致以下錯誤:
命令執行期間遇到致命錯誤。
調試時,我檢查了參數和值是否只有一個值,即:
@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.