如何从 MySqlCommand 获取带有参数的查询
How to get query with parameters form MySqlCommand
我正在尝试获取使用参数生成的 MySQL 查询文本,但到目前为止我还没有成功。
string query = $"UPDATE table_inputs SET amount = @amount WHERE id = @id";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteScalar();
// always 'result' equal NULL
}
记录需要请求文本。我计划从一个多线程应用程序中写入日志,其中每个操作都应该有自己独特的参数。因此,在清楚执行了何种查询和何种参数的情况下,需要带参数的查询。
请告诉我我做错了什么以及如何做对。
这未经测试且不完整,请考虑使用更多伪代码来给您一个想法。
您可以编写一个实用程序方法来接受命令,用参数值替换参数占位符,然后记录查询。
public static void LogCommand(MySqlCommand cmd)
{
string cmdText = cmd.CommandText;
foreach(MySqlParameter p in cmd.Parameters)
{
cmdText = cmdText.Replace(p.ParameterName, p.Value);
}
Log(cmdText); // <-- or however you are logging....
}
请尝试下面的代码其工作...,
第 1 步:声明字符串值。
第 2 步:然后阅读!运算符方法 ().
第 3 步:在满足条件后应检索数据。
string val;
string query = $"UPDATE table_inputs SET amount = @amount WHERE id = @id";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteNonQuer();
// always 'result' equal NULL
}
string qur = $"select * from table_inputs where amount = @amount and id = @id";
using (MySqlCommand command = new MySqlCommand(qur, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteReader();
if(!result.Read())
{
Console.Write("Record not found ");
}
else
{
string userid = Convert.ToString(val);
userid = dr["@id"].ToString();
Console.WriteLine("Your ID is: {@id}", userid.ToString());
Console.ReadLine();
string amt = Convert.ToString(val);
amd = dr["@amount"].ToString();
Console.WriteLine("Your Amount is: {@amount}", amount.ToString());
Console.ReadLine();
}
}
尝试使用存储过程的另一个选项:
//----SQL Store Procedure----
CREATE PROCEDURE Procedurename @Id integer(), @amount number()
AS
UPDATE table_inputs SET amount = @amount WHERE id = @id
go
//-----C# code-----
using (MySqlCommand command = new MySqlCommand("Procedurename", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
command.ExecuteNonQuer();
}
我正在尝试获取使用参数生成的 MySQL 查询文本,但到目前为止我还没有成功。
string query = $"UPDATE table_inputs SET amount = @amount WHERE id = @id";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteScalar();
// always 'result' equal NULL
}
记录需要请求文本。我计划从一个多线程应用程序中写入日志,其中每个操作都应该有自己独特的参数。因此,在清楚执行了何种查询和何种参数的情况下,需要带参数的查询。 请告诉我我做错了什么以及如何做对。
这未经测试且不完整,请考虑使用更多伪代码来给您一个想法。
您可以编写一个实用程序方法来接受命令,用参数值替换参数占位符,然后记录查询。
public static void LogCommand(MySqlCommand cmd)
{
string cmdText = cmd.CommandText;
foreach(MySqlParameter p in cmd.Parameters)
{
cmdText = cmdText.Replace(p.ParameterName, p.Value);
}
Log(cmdText); // <-- or however you are logging....
}
请尝试下面的代码其工作...,
第 1 步:声明字符串值。
第 2 步:然后阅读!运算符方法 ().
第 3 步:在满足条件后应检索数据。
string val;
string query = $"UPDATE table_inputs SET amount = @amount WHERE id = @id";
using (MySqlCommand command = new MySqlCommand(query, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteNonQuer();
// always 'result' equal NULL
}
string qur = $"select * from table_inputs where amount = @amount and id = @id";
using (MySqlCommand command = new MySqlCommand(qur, connection))
{
command.CommandType = CommandType.Text;
command.Prepare();
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
var result = command.ExecuteReader();
if(!result.Read())
{
Console.Write("Record not found ");
}
else
{
string userid = Convert.ToString(val);
userid = dr["@id"].ToString();
Console.WriteLine("Your ID is: {@id}", userid.ToString());
Console.ReadLine();
string amt = Convert.ToString(val);
amd = dr["@amount"].ToString();
Console.WriteLine("Your Amount is: {@amount}", amount.ToString());
Console.ReadLine();
}
}
尝试使用存储过程的另一个选项:
//----SQL Store Procedure----
CREATE PROCEDURE Procedurename @Id integer(), @amount number()
AS
UPDATE table_inputs SET amount = @amount WHERE id = @id
go
//-----C# code-----
using (MySqlCommand command = new MySqlCommand("Procedurename", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", user_id);
command.Parameters.AddWithValue("@amount", user_amount);
command.ExecuteNonQuer();
}