是否可以通过使用表名进行编码将数据插入到表中

时间:2011-06-30 08:26:25

标签: c# asp.net sql-server-2005

我的问题通常是在将数据插入表格时通过代码编写以下内容

     insert into tblname values('"+txt.text+"','"+txt1.text+"');

当我们传递数据时,文本框就像是可以插入到表中而不使用表名直接

4 个答案:

答案 0 :(得分:2)

您显然需要知道要插入的表,因此必须为INSERT语句标识一个表名。选项包括:

  1. 根据您现有示例的实际表名称的INSERT语句
  2. 以同义词作为目标的INSERT语句(实际表的别名 - 请参阅:http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/
  3. 以可更新视图作为目标的INSERT语句
  4. 一个sproc调用,其中sproc知道要插入的表(但调用代码不需要知道)
  5. 您还应该了解示例中的SQL注入风险 - 避免将值直接连接到要执行的SQL字符串中。而是参数化SQL。

    如果需要在运行时动态指定要插入的表,则必须将表名连接到随后执行的SQL语句中。但是,要非常警惕SQL注入 - 确保完全验证表名以确保其中没有任何恶意内容。您甚至可以通过在sys.tables中检查它来检查它是否真实。

答案 1 :(得分:1)

没有桌子名称就不可能。

但是如果你用适当的表填充它,你可以使用Linq To SQL(即任何ORM)或DataAdapter.Update ....

答案 2 :(得分:1)

没有表名,你不能这样做,不。但是,更大的问题是您的代码 可怕 是危险的,并且在SQL注入时也是如此。您应立即立即修复此,立即。即使对于内部应用程序,注入也是最大的风险。更好的代码是:

 insert into tblname (Foo, Bar) values(@foo, @bar)

将参数@foo@bar添加到您的命令中(显然,替换为合理的名称)。

在您提出之前:不,表名 不能 参数化;你不能使用

insert into @tblname -- blah

在任何查询或操作中,表名都是(/是)基础。

答案 3 :(得分:0)

我想如果有可能你必须使用参数。

Here你有一个小例子。