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#字符串中拼接参数该处理的问题的主要内容,如果未能解决你的问题,请参考以下文章