如何正确发送参数到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;
错误:
更新语句中的语法错误
您收到语法错误,因为无法将SQL标识符(表名,列名等)用作参数。只有值可以参数化
您的查询因此必须看起来像:
cmd.CommandText = "UPDATE "+tb_tablename.Text+" SET ["+...+"] = Replace(["+...+"], Chr(10), '');";
永远不要将用户提供的值连接到SQL中。因为在这种情况下,您被迫合并并入中的列名和列名,所以应绝对确保仅提供安全值。理想情况下,您应该采用为表名和列名提供的值,并具有很多所有表名和列名(您可以为此查询数据库),并且仅当所提供的值在该列表中时才允许sql进行构建] >
这是一个非常不寻常的要求-这里几乎没有人试图参数化表名等。如果您试图编写某种迷你库来简化数据访问的寿命,我建议您使用一个已经存在的[ C0]