我想通过循环插入数据到sql server !!我有两个清单1> FieldName 2> Textbox.text [英] I want to insert data to sql server wiht loop throught !! I have two list 1> FieldName 2> Textbox.text

查看:47
本文介绍了我想通过循环插入数据到sql server !!我有两个清单1> FieldName 2> Textbox.text的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过循环插入数据到sql server !!我有两个清单1> FieldName 2> Textbox.text



我正在处理保存类想要为保存按钮创建类库,它可以实现我的所有形式,包括我的窗口应用程序的保存按钮。 />


我用这样的参数制作了save_rec函数



I want to insert data to sql server wiht loop throught !! I have two list 1> FieldName 2> Textbox.text

I am working on save class want to make class library for save button which can implement to my all forms including save button for my window application.

I have made save_rec function with parameters like this

public void SaveRec(String Con_String, String Table_Name, Form Frm, int AddFlag, int EditFlag)





我的代码在下面





my code is below

  public void SaveRec(String Con_String, String Table_Name, Form Frm, int AddFlag, int EditFlag)
        {
             List<Control> TB_List = new List<Control>();
             List<String> Field_Name = new List<String>();
             List<String> TB_Name = new List<String>();


             foreach (Control childcontrol in Frm.Controls)
             {

                 if (childcontrol is GroupBox)
                 {
                     foreach (Control cc in childcontrol.Controls)
                     {


                         if (cc is TextBox)
                         {
                             TB_List.Add(cc);

                         }

                     }
                 }
             }


            if (AddFlag == 1)
            {
                using (SqlConnection con = new SqlConnection(Con_String))
                {

                    foreach (Control Txt_Name in TB_List)
                    {
                        String TxtName = Txt_Name.Text;
                        String field_name = Txt_Name.Name.Substring(3);
                       
                        Field_Name.Add(field_name);
                       
                        TB_Name.Add(TxtName);
                    }




                    SqlCommand cmd = new SqlCommand("Insert into "+ Table_Name + "('"+ Field_Name + "') Values('" + TB_Name + "')", con);
                   
                    
                    
                    
                    con.Open();
                    //SqlDataReader dr = new SqlDataReader();
                    cmd.ExecuteNonQuery(); 
                    

                }
            }
       }

    }
}









我收到错误 -





I am getting error -

Invalid column name 'System.Collections.Generic.List`1[System.String]'.





你能给我解决这个朋友的方法吗?



Can you give me way to solve this friends ?

推荐答案

错误的做法!



首先:你必须处理数据,而不是控制!没有机会以这种方式编写正确的代码。想象一下,当您的数据库对象发生变化时会发生什么......您将需要更改控件的名称等。



其次:您的代码是 SQL Injection [< a href =https://technet.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx\"target =_ blanktitle =New Window> ^ ]脆弱的!而不是它,使用SQL 存储过程 [ ^ ]和数据访问层+业务逻辑层 [ ^ ]
Wrong approach!

First of all: you have to work on data, not on controls! There's no chance to write proper code this way. Imagine what happens, when your database objects will change... you'll be in need to change the name of controls, etc.

Second of all: your code is SQL Injection[^] vulnerable! Rather than it, use SQL Stored procedures[^] together with Data Access Layes + Business Logic Layer[^]


这一行:

This line:
SqlCommand cmd = new SqlCommand("Insert into "+ Table_Name + "('"+ Field_Name + "') Values('" + TB_Name + "')", con);







字段名称和TB_name是列表而不是单个值。您无法避免以此特定格式循环。而且由于你已经循环填充列表,你可以立即调用sqlcommand(只是不要忘记在开始时的opentransaction并在结束时提交 - 也就是说,插入全部或全部)



您可以,而不是填充集合(列表),填充数据表对象,然后使用

SqlBulkCopy一次保存所有内容 [ ^ ]


这篇关于我想通过循环插入数据到sql server !!我有两个清单1&gt; FieldName 2&gt; Textbox.text的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆