命令参数

问题描述 投票:0回答:1

如何正确发送参数到oledb查询?

MyCode是

cmd.CommandText = "UPDATE @target SET [@columnname] = Replace([@columnname], Chr(10), '');";

cmd.Parameters.Add(new OleDbParameter("@target", OleDbType.VarChar)).Value = tb_tablename.Text.Trim();
cmd.Parameters.Add(new OleDbParameter("@columnname", OleDbType.VarChar)).Value = column.ColumnName;

并且它不起作用)。我需要添加查询@target(表名)和@columnname(列名)。

已修改为使用?编码

cmd.CommandText = "UPDATE ? SET [?] = Replace([?], Chr(10), '');";

cmd.Parameters.Add(new OleDbParameter("@target", OleDbType.VarChar)).Value = tb_tablename.Text.Trim();
cmd.Parameters.Add(new OleDbParameter("@columnname", OleDbType.VarChar)).Value = column.ColumnName;
cmd.Parameters.Add(new OleDbParameter("@columnname", OleDbType.VarChar)).Value = column.ColumnName;

错误:

更新语句中的语法错误

c# oledb
1个回答
1
投票

您收到语法错误,因为无法将SQL标识符(表名,列名等)用作参数。只有值可以参数化

您的查询因此必须看起来像:

cmd.CommandText = "UPDATE "+tb_tablename.Text+" SET ["+...+"] = Replace(["+...+"], Chr(10), '');";

永远不要将用户提供的值连接到SQL中。因为在这种情况下,您被迫合并并入中的列名和列名,所以应绝对确保仅提供安全值。理想情况下,您应该采用为表名和列名提供的值,并具有很多所有表名​​和列名(您可以为此查询数据库),并且仅当所提供的值在该列表中时才允许sql进行构建] >

这是一个非常不寻常的要求-这里几乎没有人试图参数化表名等。如果您试图编写某种迷你库来简化数据访问的寿命,我建议您使用一个已经存在的[ C0]

© www.soinside.com 2019 - 2024. All rights reserved.