---
title: "Lång insert"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/82184-lång-insert"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "aleborg"
published: "2003-07-16T20:28:17.000Z"
updated: "2003-07-19T23:46:24.000Z"
replies: 11
views: 441
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/82184-lång-insert"
---

# Lång insert

## #1 — aleborg, 2003-07-16T20:28Z

Jag har ett formulär som innehåller ca 88 st textfält, det skulle bli en grymt lång insert-sats, kan man på nått sätt göra en loop och trycka in allt? textfälten har samma namn som databasfälten...

Permalänk: https://www.webforum.nu/p/82184

## #2 — fredrik, 2003-07-17T06:38Z

Ja...det bör väl inte vara spec. lurigt....

Använder du SQL-server och en SP?

I så fall kan du göra så här typ:

1\. Skapa ett command-objekt mot din SP
2\. Loopa igenom alla dina kontroller
3\. Kontrollera aktuellt kontrolls-namn och jämför mot ditt command-objekt om namnet finns med som en parameter
4\. Finns det med så lägg med parametern med aktuellt namn och värde
5\. Kör din SP.

På detta sätt kan du även ha med kontroller som inte finns i databasen.

Kör du inte med SP få du loopa igenom kontrollerna och helt enkelt anta att alla ska vara med, och då skapa SQL-strängen manuellt. 

```
        Dim Ctrl As Control
        Dim sb As New System.Text.StringBuilder("INSERT INTO Tbl (")
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is TextBox Then
                sb.Append(Ctrl.Name)
                sb.Append(",")
            End If
        Next
        sb.Remove(sb.Length - 1, 1)
        sb.Append(") VALUES (")
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is TextBox Then
                sb.Append("'")
                sb.Append(Ctrl.Text)
                sb.Append("',")
            End If
        Next
        sb.Remove(sb.Length - 1, 1)
        sb.Append(")")
```

Går även att göra bättre...men du ser mönstret iaf...

Permalänk: https://www.webforum.nu/p/1113554

## #3 — aleborg, 2003-07-17T07:01Z

Kör C# och MySQL :D

Permalänk: https://www.webforum.nu/p/1113565

## #4 — fredrik, 2003-07-17T07:13Z

Ok...ja då får det bli alternativ 2 då....

Du ser säkert från min VB kod hur det ser ut...

...annars kan säkert nån annan översätta...det är väldigt simpel kod...

Permalänk: https://www.webforum.nu/p/1113569

## #5 — aleborg, 2003-07-17T09:23Z

Hmmm, får inte riktigt ihop det

```
StringBuilder sb = new StringBuilder("Insert Into reseller_contacts (");
foreach(Control Ctrl in this.Controls)
{
	if(Ctrl.GetType()==TextBox)
		sb.Append(Ctrl.NamingContainer+",");
}
```

Ctrl.Name finns inte och  'System.Web.UI.HtmlControls.HtmlInputText' denotes a 'class' where a 'variable' was expected

Permalänk: https://www.webforum.nu/p/1113612

## #6 — aleborg, 2003-07-17T12:30Z

Här är koden jag har nu:

```
StringBuilder sb = new StringBuilder("Insert Into reseller_contacts (");
foreach(Control Ctrl in this.Controls)
{
	if(Ctrl is System.Web.UI.HtmlControls.HtmlInputText)
	{
		sb.Append(Ctrl.ToString());
		sb.Append(",");
	}
}
sb.Remove(sb.Length -1,1);
sb.Append(") VALUES (");
			
foreach(Control Ctrl in this.Controls)
{
	if(Ctrl is System.Web.UI.HtmlControls.HtmlInputText)
	{
		sb.Append("'");
		sb.Append(Ctrl.ToString());
		sb.Append("',");
	}
}
sb.Remove(sb.Length - 1, 1);
sb.Append(")");

Response.Write (sb.ToString());
```

sb.ToString() har jag satt tillfälligt eftersom inte Name kan hittas
Det här får jag ut:

Insert Into reseller_contacts ) VALUES ) 

någon som har ett tips?

Permalänk: https://www.webforum.nu/p/1113735

## #7 — aleborg, 2003-07-17T17:08Z

Mitt problem är att alla textfält ligger i en table som är en server kontroll, som i sin tur ligger i en panel:
EX:

```
<asp:panel id="Step3" runat="server" Visible="True">
<TABLE id="contact" cellSpacing="0" cellPadding="0" border="0" runat="server">
<TR>
<TD><INPUT class="input400" id="c_company" type="text" maxLength="150" name="c_company" runat="server"></TD>
</TR>
</TABLE>
</asp:panel>
```

Kör jag den här koden:

```
foreach(Control ctrl in Step3.Controls)
{
	Response.Write(ctrl.ID + " " + ctrl.GetType().ToString() + "<br>");
}
```

så får jag ut:

> System.Web.UI.LiteralControl
> contact System.Web.UI.HtmlControls.HtmlTable

Om jag lägger inputen utanför tabellen så får jag upp den i listan, men det är tyvärr inget alternativ eftersom tabellen visas beroende på andra inställningar!

Byter jag ut "Step3.Controls" till "contact.Controls" så får jag ut

> System.Web.UI.HtmlControls.HtmlTableRow

Hur löser jag det här?

Permalänk: https://www.webforum.nu/p/1113856

## #8 — Dino, 2003-07-17T17:40Z

Här får jag fram alla textboxars värde:

```
<asp:Button ID="btGrr" OnClick="btGrr_Click" Text="Ta fram" Runat="server"/>
<asp:Panel ID="pnlGrr" Runat="server">
   <table>
      <tr>
         <td>
            <asp:TextBox ID="tb1" Runat="server"/>
         </td>
      </tr>
      <tr>
         <td>
            <asp:TextBox ID="tb2" Runat="server"/>
         </td>
      </tr>
      <tr>
         <td>
            <asp:TextBox ID="tb3" Runat="server"/>
         </td>
      </tr>
   </table>
</asp:Panel>
```

 

```
public void btGrr_Click(object sender, System.EventArgs e)
{
   foreach(Control grr in pnlGrr.Controls)
   {
      if(grr.ToString() == "System.Web.UI.WebControls.TextBox")
      {
         Response.Write(((TextBox)grr).Text + "<br/>");
      }
   }
}
```

Permalänk: https://www.webforum.nu/p/1113867

## #9 — aleborg, 2003-07-17T19:02Z

Jo, men prova göra \<table\> till \<table id="contact" cellSpacing="0" cellPadding="0" border="0" runat="server"\>

Permalänk: https://www.webforum.nu/p/1113909

## #10 — Dino, 2003-07-18T13:38Z

Här får jag nu fram textboxarnas värde från koden i mitt förra inlägg.

```
public void btGrr_Click(object sender, System.EventArgs e)
{
   foreach(Control grr in pnlGrr.Controls)
   {
      if(grr.ToString() == "System.Web.UI.HtmlControls.HtmlTable")
      {
         for (int i=0; i<=tblHmm.Rows.Count - 1; i++)
         {
            Response.Write("<li>" + ((TextBox)tblHmm.Rows[i].FindControl("tb" + (i + 1))).Text );
         }
      }
   }
}
```

Fråga. Varför har du runat="server" på tabellen?

Permalänk: https://www.webforum.nu/p/1114177

## #11 — aleborg, 2003-07-18T18:38Z

Fick det här svaret på ett annat forum:
HtmlControllerna är "Children" till tabellen och den här koden ska fungera, har dock inte testat den än:

```
foreach(Control ctrTopLvl in Step3.Controls) 
{ 
     Response.Write(ctrTopLvl.ID + " " + ctrTopLvl.GetType().ToString() + "<br>"); 
     foreach(Control ctrSecondLvl in ctrTopLvl.Controls) 
     { 
          Response.Write("     " + ctrSecondLvl.ID + " " + ctrSecondLvl.GetType().ToString() + "<br>"); 
     }
}
```

Permalänk: https://www.webforum.nu/p/1114342

## #12 — kristoffer, 2003-07-19T23:46Z

> **aleborg skrev:**
>
> Fick det här svaret på ett annat forum:
> HtmlControllerna är "Children" till tabellen och den här koden ska fungera, har dock inte testat den än:
>
>
> ```
> foreach(Control ctrTopLvl in Step3.Controls) 
> { 
>      Response.Write(ctrTopLvl.ID + " " + ctrTopLvl.GetType().ToString() + "<br>"); 
>      foreach(Control ctrSecondLvl in ctrTopLvl.Controls) 
>      { 
>           Response.Write("     " + ctrSecondLvl.ID + " " + ctrSecondLvl.GetType().ToString() + "<br>"); 
>      }
> }
> ```

Nja, eftersom varje ctrSecondLvl också kan ha noll eller flera Controller så skall man loopa rekursivt, och inte så som du har gjort.

Permalänk: https://www.webforum.nu/p/1115012

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/82184-lång-insert
