使用LINQ将多个文本框插入到sql表的单独行中

本文关键字:sql 单独行 插入 LINQ 文本 使用 | 更新日期: 2023-09-27 18:12:58

使用LINQ将文本框的值插入sql表的单行的特定列中不是什么大问题,但是如何在新行中插入每个文本框的内容,例如,如果我们有5个文本框,那么它应该在sql表中创建5个新行。下面是我如何将文本框插入到单行的不同列中:

Table Name: tblModulRelayConfig 
index   fltCe  fltUT1  fltUT2  fltUT3  fltUT4  fltUT5  fltUT6
1       75     Text1   Text2   Text3   Text4   Text5   Text6
2       76     Text1   Text2   Text3   Text4   Text5   Text6

       using (myDataContext mydc= new myDataContext())
           {
           tblModulRelayConfig tblModuler = (from CE in mydc.tblCEs
                                             where CE.fltCE == 75
                                             select CE).FirstOrDefault();
           if(tblModuler != null)//in order to update table
             {
                    nyModul.fltUT1 = TextBox1.Text;
                    nyModul.fltUT2 = TextBox2.Text;
                    nyModul.fltUT3 = TextBox3.Text;
                    nyModul.fltUT4 = TextBox4.Text;
                    nyModul.fltUT5 = TextBox5.Text;
                    nyModul.fltUT6 = TextBox6.Text;
             }
             else // if it does no exist already 
             {
                    tblModulRelayConfig nyModul = new tblModulRelayConfig();
                    nyModul.fltUT1 = TextBox1.Text;
                    nyModul.fltUT2 = TextBox2.Text;
                    nyModul.fltUT3 = TextBox3.Text;
                    nyModul.fltUT4 = TextBox4.Text;
                    nyModul.fltUT5 = TextBox5.Text;
                    nyModul.fltUT6 = TextBox6.Text;
                    mydc.tblModulRelayConfigs.InsertOnSubmit(nyModul);
                    mydc.SubmitChanges();
            }
         }

但是如何创建一个表如下,我的意思是,而不是插入文本框值在单行,我想插入数据的每个文本框在新的行在单个按钮单击:

tblModulRelayConfig 
index   fltCe  fltUTNr  fltUT  
1       75     1        Text1   
2       75     2        Text2  
3       75     3        Text3  
4       75     4        Text4  
5       75     5        Text5  
6       75     6        Text6  

我尝试了下面的代码,但没有break in循环,它只添加最后一个文本框的数据到表和break它只添加第一个文本框的值。我尝试使用的代码是从下面的链接:在单独的文本框中显示sql表行

  var textbox = GetAll(this, typeof(TextBox));
                tblModulRelayConfig nyKanal = new tblModulRelayConfig ();
                foreach (Control c in textbox)
                {
                    textNr++;
                    if (c is TextBox)
                    {
                        var tx = ((TextBox)c);
                        nyKanal.fltUTNr = textNr;
                        nyKanal.fltUT=tx.Text;
                        sls.tblModulRelayConfig .InsertOnSubmit(nyKanal);
                        sls.SubmitChanges();
                        break;
                    }
                }

使用LINQ将多个文本框插入到sql表的单独行中

您可以试试这个解决方案。我用包含文本框名称的fltUTName替换了fltUTNr。这样你就有了一个更强的ui绑定:

index   fltCe  fltUTName  fltUT  
1       75     TexBox1    Text1   
2       75     TexBox2    Text2  
3       75     TexBox3    Text3  
4       75     TexBox4    Text4  
5       75     TexBox5    Text5  
6       75     TexBox6    Text6

int fltCE_item = 75;
using (myDataContext mydc= new myDataContext()){
   List<tblModulRelayConfig> tblModuler = (
             from CE in mydc.tblCEs 
             where CE.fltCE == fltCE_item 
             select CE
   );
   foreach(TextBox tx in GetAll(this, typeof(TextBox)){
      if(tblModuler.Count > 0){ //update table
         foreach(var CE in tblModuler)
            if(CE.fltUTName.Equals(tx.Name))
               CE.fltUT = tx.Text;
      }else{ //insert: index should be autoseeded into the db;
        tblModulRelayConfig nyModul = new tblModulRelayConfig();
        nyModul.fltCe = fltCE_item;
        nyModul.fltUTName = tx.Name; 
        nyModul.fltUT = tx.Text; 
        mydc.tblModulRelayConfigs.InsertOnSubmit(nyModul);
      }
   }
   mydc.SubmitChanges();
}