2013-03-12 27 views
0

我有动态生成的文本框,我需要在我的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将直接转嫁到插入查询,使所有的值将直接服用。

但是逻辑不起作用。

请帮助..

+0

我需要解决这个问题....尝试了几种方法,但没有奏效。请帮忙.. – user 2013-03-12 11:39:39

+0

最大文本框的数量是否固定?如果不是,那么您将如何决定表格的列数? – 2013-03-12 11:42:00

+0

@RaviSingh:没有先生。这个数字将在运行时决定。我可以使用组合框来计算表中列的数量,并动态生成相同数量的文本框 – user 2013-03-12 11:44:08

回答

1

几个百分点

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

希望这有助于

+0

先生...是的SQL注入可能是一个问题。但首先我不能通过动态插入导航到查询.. – user 2013-03-12 11:57:58

+1

请不要打电话给我先生,我为谋生而工作。你知道你插入的表的名字吗?你知道桌子上的柱子的名字吗? – 2013-03-12 12:13:36

+0

是的,我知道....表名以及已经存在的列。 – user 2013-03-12 12:16:03

0

你需要保持你的文本框的轨道,因为它们产生的。

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

...

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

然后,如果你有使用paramaterized命令

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() 

我还没有加入您的列名的地方

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

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

错误处理