---
title: "Fel på SQL-sats"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/139649-fel-på-sql-sats"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "trexter"
published: "2005-12-20T17:41:05.000Z"
updated: "2005-12-20T20:38:46.000Z"
replies: 10
views: 585
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/139649-fel-på-sql-sats"
---

# Fel på SQL-sats

## #1 — trexter, 2005-12-20T17:41Z

```
              String updateCmd = "UPDATE Feltexter SET FelText = @FelText where FelAnvID = " + Session["UserID"];
              SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

              myCommand.Parameters.Add(new SqlParameter("@FelText", SqlDbType.NVarChar, 40));
              myCommand.Parameters["@FelText"].Value = edit_error.Text;

              myCommand.Connection.Open();
```

```
 Exception Details: System.Data.SqlClient.SqlException: Rad 1: Felaktig syntax nära '='.
```

Allt ska stämma. Feltexter innehåller kolumnerna:
FelID
FelText
FelAnvID

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

## #2 — mozilla, 2005-12-20T17:54Z

Eftersom FelText är av typen varchar måste du ha hakar runt texten(i SQL frågan). Och varför blanda både med och utan parametrar? Tycker du parametrar är så mycket jobbigare? Man får ju mycket bättre överblick annars.

```
  string updateCmd = "UPDATE Feltexter SET FelText = '@FelText' WHERE FelAnvID = @AnvID";
  SqlCommand cmd = new SqlCommand(updateCmd, myConnection);

  cmd.Parameters.Add("@FelText", SqlDbType.NVarChar, 40).Value = edit_error.Text;
  cmd.Parameters.Add("@AnvID", SqlDbType.Int, 10).Value = Session["UserID"];

  myConnection.Open()
  cmd.ExecuteNonQuery();
  myConnection.Close()
```

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

## #3 — trexter, 2005-12-20T18:16Z

Fortfarande samma felmeddelande, tyvärr.
Hur skriver man lämpligast ut hela SQL-strängen, inkl. parametrar och avbryter kodkörningen?

Som reponse.write strSQL & response.end i gamla asp.

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

## #4 — trexter, 2005-12-20T18:25Z

Det fungerade visst då. Sessionen var slut. Har ett annat delikat problem. Jag vill rendera ett dataset (vilket fungerar nu) och göra så att varje post blir "editerbar" genom att man klickar på den.

Ganska standard alltså men får inte rätt på't. Då jag klickar på Editera försvinner hela datasetet från sidan och hela tabellen som ska presenteras.

Postar .cs & .aspx-filen:

```
namespace mysite
{
  using System;
  using System.Collections;
  using System.ComponentModel;
  using System.Data;
  using System.Data.SqlClient;
  using System.Web;
  using System.Web.SessionState;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.Security;
  using System.Configuration;
  public class errors : System.Web.UI.Page
  {
      public System.Web.UI.WebControls.DataGrid MyDataGrid;
      public System.Web.UI.WebControls.RequiredFieldValidator errorReqVal;
      public System.Web.UI.WebControls.Label Message;
      public System.Web.UI.WebControls.TextBox error;

      public System.Web.UI.WebControls.Label Label1;
      public System.Web.UI.WebControls.RequiredFieldValidator edit_errorReqVal;
      public System.Web.UI.WebControls.TextBox edit_error;

    SqlConnection myConnection;

    protected void Page_Load(Object Src, EventArgs E)
    {
        myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

        if (!IsPostBack)
        {
            BindGrid();
            Page.DataBind();
        }
    }

    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
        BindGrid();
    }

    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = -1;
        BindGrid();
    }

      public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E)
      {
          if (Page.IsValid)
          {
                string updateCmd = "UPDATE Feltexter SET FelText = '@FelText' WHERE FelAnvID = @AnvID";
                SqlCommand cmd = new SqlCommand(updateCmd, myConnection);

                cmd.Parameters.Add("@FelText", SqlDbType.NVarChar, 40).Value = edit_error.Text;
                cmd.Parameters.Add("@AnvID", SqlDbType.Int, 10).Value = Session["UserID"];

                cmd.Connection.Open();

              cmd.ExecuteNonQuery();
              MyDataGrid.EditItemIndex = -1;

              cmd.Connection.Close();

              BindGrid();
          }
          else
          {
          }
      }

    public void AddError_Click(Object sender, EventArgs E)
    {
        if (Page.IsValid)
        {

            String insertCmd = "insert into Feltexter (FelText, FelAnvID) values (@FelText, @FelAnvID)";

            SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);

            myCommand.Parameters.Add(new SqlParameter("@FelText", SqlDbType.NVarChar, 300));
            myCommand.Parameters["@FelText"].Value = error.Text;

            myCommand.Parameters.Add("@FelAnvID", SqlDbType.Int, 400);
            myCommand.Parameters["@FelAnvID"].Value = Session["UserID"];

            myCommand.Connection.Open();

            try
            {
                myCommand.ExecuteNonQuery();
                Message.Text = "<b>Ditt felmeddelande har lagts till.</b>";
            }
            catch (SqlException e)
            {
                if (e.Number == 2627)
                    Message.Text = "Fel: En post med samma primärnyckel existerar redan.";
                else
                    Message.Text = "Fel: Fältet kunde inte läggas till. : " + e.Message;
              Message.Style["color"] = "red";
            }

            myCommand.Connection.Close();
        }

        BindGrid();
    }

    public void BindGrid()
    {
        SqlDataAdapter myCommand = new SqlDataAdapter("select * from Feltexter where FelAnvID = "+Session["UserID"]+"", myConnection);

        DataSet ds = new DataSet();
        myCommand.Fill(ds, "Feltexter");

        MyDataGrid.DataSource=ds.Tables["Feltexter"].DefaultView;
        MyDataGrid.DataBind();
    }

  }
}
```

```
...
          <ASP:DataGrid id="MyDataGrid" runat="server"
            Width="700"
            BackColor="#ccccff"
            BorderColor="black"
            ShowFooter="false"
            CellPadding=3
            CellSpacing="0"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#aaaadd"
            EnableViewState="false">
          <Columns>
            <ASP:EditCommandColumn EditText="Editera" CancelText="Avbryt" UpdateText="Uppdatera" HeaderStyle-Wrap=false />
            <ASP:BoundColumn HeaderText="Felbeskrivning" DataField="FelText" />
         
         <asp:TemplateColumn HeaderText="Felbeskrivning" SortExpression="au_lname">
          <ItemTemplate>
            <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FelText") %>'/>
          </ItemTemplate>
          <EditItemTemplate>
            <nobr>
            <asp:TextBox runat="server" id="edit_error" Text='<%# DataBinder.Eval(Container.DataItem, "FelText") %>'/>
            <asp:RequiredFieldValidator id="edit_errorReqVal"
                ControlToValidate="error"
                Display="Dynamic"
                Font-Name="Verdana" Font-Size="12"
                runat=server>
            </asp:RequiredFieldValidator>
          </EditItemTemplate>
        </asp:TemplateColumn>        
          </Columns>  
          </ASP:DataGrid>
...
```

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

## #5 — trexter, 2005-12-20T19:37Z

Någon som hittar felet?   :x

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

## #6 — mozilla, 2005-12-20T19:45Z

EnableViewState="**false**" :q :OO

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

## #7 — trexter, 2005-12-20T19:52Z

Eh, det där är från dokumentationen (ett exempel). Inte mitt fel. :e 
Jag har tagit bort det men fortfarande utan önskat resultat. Det händer inget när jag klickar "editera". :(

```
<%@ Page language="c#" src="errors.aspx.cs" Inherits="mysite.errors" %>
<html>
<body style="font: 10pt verdana">

  <form runat="server">

    <h3><font face="Verdana">Inserting a Row of Data w/ Validation</font></h3>

    <table width="95%">
      <tr>
        <td valign="top">

          <ASP:DataGrid id="MyDataGrid" runat="server"
            Width="700"
            BackColor="#ccccff"
            BorderColor="black"
            ShowFooter="false"
            CellPadding=3
            CellSpacing="0"
            Font-Name="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#aaaadd">
          <Columns>
                <ASP:EditCommandColumn EditText="Editera" CancelText="Avbryt" UpdateText="Uppdatera" HeaderStyle-Wrap=false />
                <ASP:BoundColumn HeaderText="ID" DataField="FelID" />
                <ASP:TemplateColumn HeaderText="Felbeskrivning" SortExpression="Felbeskrivning">

                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FelText") %>'/>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox runat="server" id="edit_error" Text='<%# DataBinder.Eval(Container.DataItem, "FelText") %>'/>
                    <asp:RequiredFieldValidator id="edit_errorReqVal"
                        ControlToValidate="error"
                        Display="Dynamic"
                        Font-Name="Verdana" Font-Size="12"
                        runat=server>
                    </asp:RequiredFieldValidator>
                </EditItemTemplate>
                </asp:TemplateColumn>
        
          </Columns>        
        </ASP:DataGrid>

        </td>
        <td valign="top">

          <table style="font: 8pt verdana">
            <tr>
              <td colspan="2" bgcolor="#aaaadd" style="font:10pt verdana">Definiera nytt fel:</td>
            </tr>
            <tr>
              <td nowrap>Felbeskrivning: </td>
              <td>
                <asp:TextBox ID="error" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator id="errorReqVal"
                    ControlToValidate="error"
                    Display="Static"
                    Font-Name="Verdana" Font-Size="12"
                    runat=server>
                </asp:RequiredFieldValidator>
              </td>
            </tr>
            <tr>
              <td></td>
              <td style="padding-top:15">
                <input type="submit" OnServerClick="AddError_Click" value="Lägg till fel" runat="server">
              </td>
            </tr>
            <tr>
              <td colspan="2" style="padding-top:15" align="center">
                  <asp:Label ID="Message" runat="server" Text=""></asp:Label>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>

  </form>

</body>
</html>
```

```
namespace mysite
{
  using System;
  using System.Collections;
  using System.ComponentModel;
  using System.Data;
  using System.Data.SqlClient;
  using System.Web;
  using System.Web.SessionState;
  using System.Web.UI;
  using System.Web.UI.WebControls;
  using System.Web.Security;
  using System.Configuration;

  public class errors : System.Web.UI.Page
  {
      public System.Web.UI.WebControls.DataGrid MyDataGrid;
      public System.Web.UI.WebControls.RequiredFieldValidator errorReqVal;
      public System.Web.UI.WebControls.Label Message;
      public System.Web.UI.WebControls.TextBox error;

      public System.Web.UI.WebControls.Label Label1;
      public System.Web.UI.WebControls.RequiredFieldValidator edit_errorReqVal;
      public System.Web.UI.WebControls.TextBox edit_error;

    SqlConnection myConnection;

    protected void Page_Load(Object Src, EventArgs E)
    {
        myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

        if (!IsPostBack)
        {
            BindGrid();
            //Page.DataBind();
        }
    }

    public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
        BindGrid();
    }

    public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs E)
    {
        MyDataGrid.EditItemIndex = -1;
        BindGrid();
    }

      public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E)
      {
          if (Page.IsValid)
          {
                string updateCmd = "UPDATE Feltexter SET FelText = '@FelText' WHERE FelAnvID = @AnvID AND FelID = @FelID";
                SqlCommand cmd = new SqlCommand(updateCmd, myConnection);

                cmd.Parameters.Add("@FelText", SqlDbType.NVarChar, 40).Value = edit_error.Text;
                cmd.Parameters.Add("@AnvID", SqlDbType.Int, 10).Value = Session["UserID"];
                cmd.Parameters.Add("@FelID", SqlDbType.Int, 10).Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];

                cmd.Connection.Open();

              cmd.ExecuteNonQuery();
              MyDataGrid.EditItemIndex = -1;

              cmd.Connection.Close();

              BindGrid();
          }
          else
          {
          }
      }

    public void AddError_Click(Object sender, EventArgs E)
    {
        if (Page.IsValid)
        {

            String insertCmd = "insert into Feltexter (FelText, FelAnvID) values (@FelText, @FelAnvID)";

            SqlCommand myCommand = new SqlCommand(insertCmd, myConnection);

            myCommand.Parameters.Add(new SqlParameter("@FelText", SqlDbType.NVarChar, 300));
            myCommand.Parameters["@FelText"].Value = error.Text;

            myCommand.Parameters.Add("@FelAnvID", SqlDbType.Int, 400);
            myCommand.Parameters["@FelAnvID"].Value = Session["UserID"];

            myCommand.Connection.Open();

            try
            {
                myCommand.ExecuteNonQuery();
                Message.Text = "<b>Ditt felmeddelande har lagts till.</b>";
            }
            catch (SqlException e)
            {
                if (e.Number == 2627)
                    Message.Text = "Fel: En post med samma primärnyckel existerar redan.";
                else
                    Message.Text = "Fel: Fältet kunde inte läggas till. : " + e.Message;
              Message.Style["color"] = "red";
            }

            myCommand.Connection.Close();
        }

        BindGrid();
    }

    public void BindGrid()
    {
        SqlDataAdapter myCommand = new SqlDataAdapter("select FelID, FelText from Feltexter where FelAnvID = "+Session["UserID"]+"", myConnection);

        DataSet ds = new DataSet();
        myCommand.Fill(ds, "Feltexter");

        MyDataGrid.DataSource=ds.Tables["Feltexter"].DefaultView;
        MyDataGrid.DataBind();
    }

  }
}
```

(Har ändrat en del i koden.)

 :)

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

## #8 — mozilla, 2005-12-20T19:59Z

Man måste väl ange för DataGriden vilka funktioner som skall anropas när man trycker på Edit/Cancel osv.

```
<asp:DataGrid ... 
  onEditCommand="dtgr_EditCommand"
  onUpdateCommand="dtgr_UpdateCommand"
  onCancelCommand="dtgr_CancelCommand"
```

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

## #9 — trexter, 2005-12-20T20:19Z

Bättre. Tack. ;)

Men får 

```
 Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
```

på 

```
      public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs E)
      {
                string updateCmd = "UPDATE Feltexter SET FelText = '@FelText' WHERE FelAnvID = @AnvID AND FelID = @FelID";
                SqlCommand cmd = new SqlCommand(updateCmd, myConnection);

                cmd.Parameters.Add("@FelText", SqlDbType.NVarChar, 40).Value = edit_error.Text;
                cmd.Parameters.Add("@AnvID", SqlDbType.Int, 10).Value = Session["UserID"];
                cmd.Parameters.Add("@FelID", SqlDbType.Int, 10).Value = MyDataGrid.DataKeys[(int)E.Item.ItemIndex];

                cmd.Connection.Open();

              cmd.ExecuteNonQuery();
              MyDataGrid.EditItemIndex = -1;

              cmd.Connection.Close();

              BindGrid();
      }
```

Sedan undrar jag även hur man gör för att låsa "id-kolumnen" från att vara "editerbar".

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

## #10 — cyprys, 2005-12-20T20:31Z

```
ReadOnly="True"
```

 på kolumnen borde göra gott. :)

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

## #11 — trexter, 2005-12-20T20:38Z

one to go... tror verkligen jag stirrat mig blind på något väldigt enkelt   :D

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/139649-fel-på-sql-sats
