gpt4 book ai didi

c# - 在一个查询中使用 MySqlCommand 将多条记录插入 MySQL C# (MySQLConnector) & 用于转义引号的命令参数

转载 作者:可可西里 更新时间:2023-11-01 08:37:45 28 4
gpt4 key购买 nike

我正在尝试使用 C# 中的 MySqlCommand 对象(使用 MySQL 连接器库)在一个查询中将多条记录插入到一​​个表中。

我知道如何做到这一点的唯一方法是自己动态构建查询并设置 command.CommandType = CommandType.Text;

此方法的问题是字段不会因引号等而转义。我猜我自己可以编写一个函数来转义这些值,但我在互联网上阅读的每篇文章或问题似乎都不赞成这样做,并说使用 command.Parameters 因为这样更有效和彻底。

我的问题是我不知道如何为多行设置参数。我该怎么做?

编辑:这是针对 24/7 全天候运行的商业服务,因此我需要找到最有效的方法来执行此操作。我没有使用存储过程 - 这是唯一的方法还是有其他方法?

    public static string MySqlEscape(object value)
{
string val = value.ToString();
if (val.Contains("'"))
return val.Replace("'", "' + NCHAR(96) + '");
else
return val;
}

public void InsertProcessedData(long unprocessedID, long pagerID, long firmwareRelativeProtocolID, DataTable processedData)
{
using(processedData)
{
string paramColNames = string.Empty;
for(int i =1;i<=processedData.Columns.Count;i+=1)
{
paramColNames+=string.Format("Param{0}",i);
if(i!=processedData.Columns.Count)
paramColNames+=",";
}

string SQL = "INSERT INTO gprs_data_processed (@UnprocessedID,@PagerID,@FirmwareRelativeProtocolID,"+paramColNames+") VALUES ";

for (int i = 0; i < processedData.Rows.Count;i+=1)
{
SQL += string.Format("({0},{1},{2},", unprocessedID, pagerID, firmwareRelativeProtocolID);
for (int c = 0; c < processedData.Columns.Count; c += 1)
{
SQL += string.Format("'{0}'", MySqlEscape(processedData.Rows[i][c]));
if (i != processedData.Columns.Count)
SQL += ",";
}
SQL+=")";
if (i + 1 != processedData.Rows.Count)
SQL += ",";
else
SQL += ";";
}

using (MySqlConnection connection = new MySqlConnection(_connection))
{
connection.Open();
using (MySqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = SQL;
command.ExecuteNonQuery();
}
connection.Close();
}
}
}

最佳答案

我不确定如何创建单个命令。我所做的是创建一个使用参数的方法,然后传入我想要一次运行一个的值。

我的方法:

public void Insert(string strSQL, string[,] parameterValue)
{

//open connection
if (this.OpenConnection() == true)
{
//create command and assign the query and connection from the constructor
MySqlCommand cmd = new MySqlCommand(strSQL, connection);

//add parameters
for (int i = 0; i < (parameterValue.Length / 2); i++)
{
cmd.Parameters.AddWithValue(parameterValue[i, 0], parameterValue[i, 1]);
}

//Execute command
cmd.ExecuteNonQuery();

//close connection
this.CloseConnection();
}
}

关于c# - 在一个查询中使用 MySqlCommand 将多条记录插入 MySQL C# (MySQLConnector) & 用于转义引号的命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6046577/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com