【问题标题】:Insert Query for Dynamically created textboxes为动态创建的文本框插入查询
【发布时间】:2013-02-27 21:22:43
【问题描述】:

我已经动态生成了文本框,我需要将插入查询写入我的SQL server 2005 数据库。 问题是当我编写插入查询时,我不能包含文本框名称,因为文本框将在运行时生成。

我尝试使用以下逻辑:

请注意,我希望生成动态文本框,然后生成动态 SQL 查询。

   String str=//will contain a data fetched from all the textboxes generated dynamically and will be seprated using a ','(as in an insert statement).

此字符串str 将直接传递给插入查询,以便直接获取所有值。

但是逻辑不行。

请帮忙..

【问题讨论】:

  • 我需要解决这个问题....尝试了多种方式,但没有成功。请帮忙..
  • 文本框的最大数量是固定的吗?如果不是,你将如何决定表格的列数?
  • @RaviSingh:不,先生。数量将在运行时确定。我可以使用组合框获取表中的列数并动态生成相同数量的文本框
  • @user :然后创建一个包含字段的新表:ID int,textboxName(If required) varchar(),value varchar()。这个Id 字段将引用当前表中的id。这将解决问题。
  • @RaviSingh:不,先生,这不能解决我的问题。因为我希望在我现有的表中生成一个插入查询,该表还将包括动态输入的新生成的列,为这些列创建新的文本框。

标签: c# sql-server


【解决方案1】:

几点

  1. 您的方法使您容易受到SQL injection 攻击。这是一件坏事。您应该使用 sqlCommand 对象来执行 SQL,使用参数对象传入要插入的值,这样可以防止 SQL 注入攻击。
  2. 在您插入的表格中的每一列之后命名您的文本框。

希望对你有帮助

【讨论】:

  • 先生...是的,SQL 注入可能是个问题。但首先我无法通过动态插入到查询中导航..
  • 请不要叫我先生,我以工作为生。您知道要插入的表的名称吗?你知道桌子上的列名吗?
  • 那为什么不能在列之后命名文本框呢?
【解决方案2】:

您需要在生成文本框时对其进行跟踪。

List<TextBox> TextBoxes = new List<TextBox>();

...

TextBox DynamicBox1 = new TextBox();
...
TextBoxes.Add(DynamicBox1);

如果你在某处有你的列的名称

string Columns = "@col0, @col1, @col2"; //etc

string Query = @"INSERT INTO [Table]
                 (" + Columns.Replace("@", "") + ")
                 VALUES (" + Columns+ ")";

使用参数化命令

SqlCommand Command = new SqlCommand(Query, Connection);

for (int i=0; i<TextBoxes.Count; i++)
{
    Command.Parameters.AddWithValue("@col" + i, TextBoxes[i].Text);
}

Connection.Open()
Command.ExecuteNonQuery();
Connection.Close()

我没有添加错误处理

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多