trexterMedlem sedan mars 20021 889 inlägg 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
mozillaMedlem sedan juli 20011 084 inlägg 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()
trexterMedlem sedan mars 20021 889 inlägg 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.
trexterMedlem sedan mars 20021 889 inlägg 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>
...
trexterMedlem sedan mars 20021 889 inlägg Någon som hittar felet? :x
mozillaMedlem sedan juli 20011 084 inlägg EnableViewState="false" :q :OO
trexterMedlem sedan mars 20021 889 inlägg 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.)
:)
mozillaMedlem sedan juli 20011 084 inlägg 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"
trexterMedlem sedan mars 20021 889 inlägg 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".
cyprysMedlem sedan dec. 20003 563 inlägg ReadOnly="True"
på kolumnen borde göra gott. :)
trexterMedlem sedan mars 20021 889 inlägg one to go... tror verkligen jag stirrat mig blind på något väldigt enkelt :D