c#字符串中拼接参数该处理的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#字符串中拼接参数该处理的问题相关的知识,希望对你有一定的参考价值。

在C#中执行如下字符串形式的数据库插入命令
"insert into 表1 (字段1, 字段2, 字段3) values (值1,值2,值3);"
现在想把字段与字段值用参数来代替,即:
字段1——参数1
字段2——参数2
字段3——参数3
……
也就是说这个字段1,2,3是不定的,我想换成参数来代替,有没有办法呢!
谢谢了

给你个示例吧,拼接语句而已,用存储过程有点大材小用了!
示例:string sql=string.Format("insert into 表名('字段名1','字段名2','字段名3')values('0','1','2')",字段名1的值,字段名2个值,字段名3的值);
有啥看不懂的问吧!,字段名1的值,字段名2个值,字段名3的值根据你的需求直接传就行了!
参考技术A

没有对表名或是列名中带空格的情况进行处理,也没有测试过。但是大致流程如此

[STAThread]
    static public void Main(string[] args)
    
        var sqlConnection = new SqlConnection();
        string tableName = "表名";
        // 指定插入的数据列名及值
        var values = new List<KeyValuePair<string, object>>();
        values.Add(new KeyValuePair<string, object>("column1", 1));
        values.Add(new KeyValuePair<string, object>("column2", "value2"));
        values.Add(new KeyValuePair<string, object>("column3", DateTime.Now));
        var command = CreateInsetCommand(sqlConnection, tableName, values.ToArray());
        command.ExecuteNonQuery();
    
    /// <summary>
    /// 设置一个sqlcommand 插入命令
    /// </summary>
    /// <param name="sqlConnection">数据库连接对象.</param>
    /// <param name="tableName">数据表名.</param>
    /// <param name="parameters">需要插入的列名及参数值.</param>
    /// <exception cref="System.ApplicationException">请指定插入值</exception>
    private static SqlCommand CreateInsetCommand(SqlConnection sqlConnection, string tableName, params KeyValuePair<string, object>[] parameters)
    
        if (parameters.Length == 0)
            throw new ApplicationException("请指定插入值");
        // 格式化参数及参数值
        var columnNames = Array.ConvertAll(parameters, value => value.Key);
        var columnFlags = Array.ConvertAll(parameters, value => string.Format("@0", value.Key));
        var commandText = string.Format("insert into 0 ( 1 ) parameters ( 2 );",
                                               tableName, string.Join(", ", columnNames), string.Join(", ", columnFlags));
        // 创建sqlcommand并赋值参数
        var sqlCommand = sqlConnection.CreateCommand();
        sqlCommand.CommandText = commandText;
        Array.ForEach(parameters, value => sqlCommand.Parameters.AddWithValue(
            string.Format("@0", value.Key), value));
        return sqlCommand;
    

参考技术B 请参考下列代码
string sql = "insert into TblSeats values(@loginId,@realName,@loginPwd)";
//参数的添加
var parameters = new SqlParameter[]

new SqlParameter("loginId", userName),
new SqlParameter("realName", realName),
new SqlParameter("loginPwd", userPwd)
;
SqlHelper.ExecuteNonQuery(sql,CommandType.Text,parameters);
//下面是SqlHelper.ExecuteNonQuery这个方法的具体代码
//使用params SqlParameter[] 可以实现可变个数参数的添加
public static int ExecuteNonQuery(string sql, CommandType type,params SqlParameter[] parameters)

using (var connection = new SqlConnection(ConStr))

using (var command = new SqlCommand(sql,connection))

command.CommandType = type;
if (parameters!=null)

command.Parameters.AddRange(parameters);

connection.Open();
return command.ExecuteNonQuery();



如有疑问请追问
参考技术C 可以滴,使用list数据类型来存储字段名及参数,然后再将其拼起来,我也是这样处理的。
声明一个List<string[]> Item;类型的变量,对其赋值为item.Add(new string[2] "字段1","参数1");
List类型可以动态添加,不限长度,所以你加几个参数都行。
参考技术D 请看清问题再答题。

既然字段值可以用参数传递,难道字段就不能用参数传递么?
"insert into 表1 (@param1,@param2, @param3) values (@param4,@param4,@param5);"

单步调试一下看看最终command.ExecuteNonQuery()执行的sql语句,当然你可以试一下传递不同值时能否达到预期。

有了想法就自己动手试一下吧,虽然我也没有试过。
程序是编写和调试出来的,不是问出来的。

以上是关于c#字符串中拼接参数该处理的问题的主要内容,如果未能解决你的问题,请参考以下文章

【c#】字符串的拼接

sql语句加参数

C# 中参数化拼接SQL语句插入数据库

tomcat 对请求参数中的加号是如何处理的

Lua的String字符串拼接

C#,Process.Start() 传递多参数问题。