I've been using an example out of a book to be able to edit the rows in a
database. I am getting the following error:
========================================
================
========================================
================
Server Error in '/' Application.
----
--
Operation must use an updateable query.
Description: An unhandled exception occurred during the execution of the
current web request. Please review the stack trace for more information
about the error and where it originated in the code.
Exception Details: System.Data.OleDb.OleDbException: Operation must use an
updateable query.
Source Error:
Line 74:
Line 75: objConnection.Open()
Line 76: adapter.Update(ds, "TMaster")
Line 77:
Line 78: objConnection.Close()
Source File: E:\hhsinternal\tests\editing\editing.aspx.vb Line: 76
Stack Trace:
[OleDbException (0x80004005): Operation must use an updateable query.]
System.Data.Common.DbDataAdapter. UpdatedRowStatusErrors(RowUpdatedEventAr
gs
rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
+1303846
System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs
rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) +46
System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows,
DataTableMapping tableMapping) +1750
System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable,
DataTableMapping tableMapping) +40
System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
+180
tests_editing_editing.Update(Int32 PK, String FirstName) in
E:\hhsinternal\tests\editing\editing.aspx.vb:76
tests_editing_editing.UpdateRecord(Object Sender,
DataGridCommandEventArgs E) in
E:\hhsinternal\tests\editing\editing.aspx.vb:39
System.Web.UI.WebControls.DataGrid. OnUpdateCommand(DataGridCommandEventArgs
e) +105
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs
e) +679
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source,
EventArgs e) +117
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +35
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +115
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
eventArgument) +134
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.Rai
sePostBackEvent(String
eventArgument) +7
System.Web.UI.Page. RaisePostBackEvent(IPostBackEventHandler
sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +180
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5670
----
--
Version Information: Microsoft .NET Framework Version:2.0.50215.44; ASP.NET
Version:2.0.50215.44
========================================
================
========================================
================
I can pretty much follow the code, but I don't understand what updateably
query it is referring to.
Line 75: adapter.Update(ds, "TMaster")
I have a single MS Access 2003 DB with a single table TMaster and Four
columns (PK, FirstName, LastName, EmpID). I am only pulling the data for the
PK and FirstName for my testing purposes (See SQL Statement in code).
This is my code (editing.aspx.vb), the first Imports statement starts as
Line 1. TIA, Jim
Imports System.Data
Imports System.Data.OleDb
Partial Class tests_editing_editing
Inherits System.Web.UI.Page
Public Sub EditRecord(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
employees.EditItemIndex = E.Item.ItemIndex
LoadGrid()
End Sub
Public Sub CancelRecord(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
employees.EditItemIndex = -1
LoadGrid()
End Sub
Public Sub UpdateRecord(ByVal Sender As Object, ByVal E As
DataGridCommandEventArgs)
Dim objConnection As OleDbConnection
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
If objConnection Is Nothing Then
objConnection = New OleDbConnection(strConnection)
End If
If objConnection.State = ConnectionState.Closed Then
objConnection.Open()
End If
Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
Dim ds As New DataSet()
adapter.Fill(ds, "TMaster")
objConnection.Close()
'Retrieve the field values in the edited row
Dim PK As Int32 = Convert.ToInt32(E.Item.Cells(0).Text)
Dim FirstNameTextBox As TextBox = CType(E.Item.Cells(1).Controls(0),
TextBox)
Dim FirstName As String = Convert.ToString(FirstNameTextBox.Text)
employees.EditItemIndex = -1
Update(PK, FirstName)
employees.DataSource = ds.tables("TMaster")
employees.DataBind()
End Sub
Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
Dim objConnection As OleDbConnection
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
If objConnection Is Nothing Then
objConnection = New OleDbConnection(strConnection)
End If
If objConnection.State = ConnectionState.Closed Then
objConnection.Open()
End If
Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
Dim ds As New DataSet()
adapter.Fill(ds, "TMaster")
objConnection.Close()
Dim tbl As DataTable = ds.Tables("TMaster")
tbl.PrimaryKey = New DataColumn() _
{ _
tbl.Columns("PK") _
}
Dim row As DataRow = tbl.Rows.Find(PK)
row.Item("FirstName") = FirstName
Dim cb As New OleDbCommandBuilder(adapter)
objConnection.Open()
adapter.Update(ds, "TMaster")
objConnection.Close()
End Sub
Private Sub LoadGrid()
Dim objConnection As OleDbConnection
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
If objConnection Is Nothing Then
objConnection = New OleDbConnection(strConnection)
End If
If objConnection.State = ConnectionState.Closed Then
objConnection.Open()
End If
Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
Dim ds As New DataSet()
adapter.Fill(ds, "TMaster")
objConnection.Close()
With employees
.DataSource = ds.Tables("TMaster")
.DataBind()
End With
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
LoadGrid()
End If
End Sub
End Class
========================================
===
========================================
===
Below is the editing.aspx code if needed ..
========================================
===
========================================
===
<%@dotnet.itags.org. Page Language="VB" AutoEventWireup="false" CodeFile="editing.aspx.vb"
Inherits="tests_editing_editing" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataGrid ID="employees" runat="server" CellPadding="5"
AutoGenerateColumns="false" OnEditCommand="EditRecord"
OnCancelCommand="CancelRecord"
OnUpdateCommand="UpdateRecord">
<Columns>
<asp:BoundColumn DataField="PK" ReadOnly="true" Visible="false" />
<asp:BoundColumn DataField="FirstName" HeaderText="First Name"
ReadOnly="False" />
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Save"
CancelText="Cancel" EditText="Edit" />
</Columns>
</asp:DataGrid>
</div>
</form>
</body>
</html>You didn't define an update query for the adapter to use. It doesn't know
how to do the update on its own.
You either have to supply the update command, or you have to use an
OleDBCommandBuilder object. If can do some research on both these techniques
for more information.
"Jim in Arizona" <tiltowait@.hotmail.com> wrote in message
news:expPkN2$FHA.1312@.TK2MSFTNGP09.phx.gbl...
> I've been using an example out of a book to be able to edit the rows in a
> database. I am getting the following error:
> ========================================
================
> ========================================
================
> Server Error in '/' Application.
> ----
--
> Operation must use an updateable query.
> Description: An unhandled exception occurred during the execution of the
> current web request. Please review the stack trace for more information
> about the error and where it originated in the code.
> Exception Details: System.Data.OleDb.OleDbException: Operation must use an
> updateable query.
> Source Error:
> Line 74:
> Line 75: objConnection.Open()
> Line 76: adapter.Update(ds, "TMaster")
> Line 77:
> Line 78: objConnection.Close()
> Source File: E:\hhsinternal\tests\editing\editing.aspx.vb Line: 76
> Stack Trace:
> [OleDbException (0x80004005): Operation must use an updateable query.]
> System.Data.Common.DbDataAdapter. UpdatedRowStatusErrors(RowUpdatedEventAr
g
s
> rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
> +1303846
> System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs
> rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) +46
> System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows,
> DataTableMapping tableMapping) +1750
> System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable
> dataTable, DataTableMapping tableMapping) +40
> System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String
> srcTable) +180
> tests_editing_editing.Update(Int32 PK, String FirstName) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:76
> tests_editing_editing.UpdateRecord(Object Sender,
> DataGridCommandEventArgs E) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:39
> System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArg
s
> e) +105
> System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source,
> EventArgs e) +679
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
> +35
> System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source,
> EventArgs e) +117
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
> +35
> System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +115
> System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
> eventArgument) +134
> System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.R
aisePostBackEvent(String
> eventArgument) +7
> System.Web.UI.Page. RaisePostBackEvent(IPostBackEventHandler
> sourceControl, String eventArgument) +11
> System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +180
> System.Web.UI.Page.ProcessRequestMain(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5670
> ----
--
> Version Information: Microsoft .NET Framework Version:2.0.50215.44;
> ASP.NET Version:2.0.50215.44
> ========================================
================
> ========================================
================
> I can pretty much follow the code, but I don't understand what updateably
> query it is referring to.
> Line 75: adapter.Update(ds, "TMaster")
> I have a single MS Access 2003 DB with a single table TMaster and Four
> columns (PK, FirstName, LastName, EmpID). I am only pulling the data for
> the PK and FirstName for my testing purposes (See SQL Statement in code).
> This is my code (editing.aspx.vb), the first Imports statement starts as
> Line 1. TIA, Jim
> Imports System.Data
> Imports System.Data.OleDb
> Partial Class tests_editing_editing
> Inherits System.Web.UI.Page
> Public Sub EditRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> employees.EditItemIndex = E.Item.ItemIndex
> LoadGrid()
> End Sub
> Public Sub CancelRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> employees.EditItemIndex = -1
> LoadGrid()
> End Sub
> Public Sub UpdateRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> 'Retrieve the field values in the edited row
> Dim PK As Int32 = Convert.ToInt32(E.Item.Cells(0).Text)
> Dim FirstNameTextBox As TextBox =
> CType(E.Item.Cells(1).Controls(0), TextBox)
> Dim FirstName As String = Convert.ToString(FirstNameTextBox.Text)
> employees.EditItemIndex = -1
> Update(PK, FirstName)
> employees.DataSource = ds.tables("TMaster")
> employees.DataBind()
> End Sub
> Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
>
> Dim tbl As DataTable = ds.Tables("TMaster")
> tbl.PrimaryKey = New DataColumn() _
> { _
> tbl.Columns("PK") _
> }
> Dim row As DataRow = tbl.Rows.Find(PK)
> row.Item("FirstName") = FirstName
> Dim cb As New OleDbCommandBuilder(adapter)
> objConnection.Open()
> adapter.Update(ds, "TMaster")
> objConnection.Close()
> End Sub
> Private Sub LoadGrid()
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> With employees
> .DataSource = ds.Tables("TMaster")
> .DataBind()
> End With
> End Sub
> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
> System.EventArgs) Handles Me.Load
> If Not Page.IsPostBack Then
> LoadGrid()
> End If
> End Sub
> End Class
> ========================================
===
> ========================================
===
> Below is the editing.aspx code if needed ..
> ========================================
===
> ========================================
===
> <%@. Page Language="VB" AutoEventWireup="false" CodeFile="editing.aspx.vb"
> Inherits="tests_editing_editing" %>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" >
> <head runat="server">
> <title>Untitled Page</title>
> </head>
> <body>
> <form id="form1" runat="server">
> <div>
> <asp:DataGrid ID="employees" runat="server" CellPadding="5"
> AutoGenerateColumns="false" OnEditCommand="EditRecord"
> OnCancelCommand="CancelRecord"
> OnUpdateCommand="UpdateRecord">
> <Columns>
> <asp:BoundColumn DataField="PK" ReadOnly="true" Visible="false" />
> <asp:BoundColumn DataField="FirstName" HeaderText="First Name"
> ReadOnly="False" />
> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Save"
> CancelText="Cancel" EditText="Edit" />
> </Columns>
> </asp:DataGrid>
> </div>
> </form>
> </body>
> </html>
>
>
>
The most common problem asociated with the
"Operation must use an updateable query" error message is that the
account you are using doesn't have read/write permissions to the
directory and/or Access database file which you are trying to modify.
Juan T. Llibre
ASP.NET MVP
============
"Jim in Arizona" <tiltowait@.hotmail.com> wrote in message
news:expPkN2$FHA.1312@.TK2MSFTNGP09.phx.gbl...
> I've been using an example out of a book to be able to edit the rows in a
database. I am getting
> the following error:
> ========================================
================
> ========================================
================
> Server Error in '/' Application.
> ----
--
> Operation must use an updateable query.
> Description: An unhandled exception occurred during the execution of the c
urrent web request.
> Please review the stack trace for more information about the error and whe
re it originated in the
> code.
> Exception Details: System.Data.OleDb.OleDbException: Operation must use an
updateable query.
> Source Error:
> Line 74:
> Line 75: objConnection.Open()
> Line 76: adapter.Update(ds, "TMaster")
> Line 77:
> Line 78: objConnection.Close()
> Source File: E:\hhsinternal\tests\editing\editing.aspx.vb Line: 76
> Stack Trace:
> [OleDbException (0x80004005): Operation must use an updateable query.]
> System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventA
rgs rowUpdatedEvent,
> BatchCommandInfo[] batchCommands, Int32 commandCount) +1303846
> System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs ro
wUpdatedEvent,
> BatchCommandInfo[] batchCommands, Int32 commandCount) +46
> System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMap
ping tableMapping) +1750
> System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable
, DataTableMapping
> tableMapping) +40
> System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable
) +180
> tests_editing_editing.Update(Int32 PK, String FirstName) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:76
> tests_editing_editing.UpdateRecord(Object Sender, DataGridCommandEventAr
gs E) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:39
> System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventA
rgs e) +105
> System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArg
s e) +679
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +3
5
> System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, Even
tArgs e) +117
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +3
5
> System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +115
> System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgu
ment) +134
> System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.R
aisePostBackEvent(String
> eventArgument) +7
> System.Web.UI.Page. RaisePostBackEvent(IPostBackEventHandler
sourceContro
l, String eventArgument)
> +11
> System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +180
> System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPo
int, Boolean
> includeStagesAfterAsyncPoint) +5670
> ----
--
> Version Information: Microsoft .NET Framework Version:2.0.50215.44; ASP.NE
T Version:2.0.50215.44
> ========================================
================
> ========================================
================
> I can pretty much follow the code, but I don't understand what updateably
query it is referring
> to.
> Line 75: adapter.Update(ds, "TMaster")
> I have a single MS Access 2003 DB with a single table TMaster and Four col
umns (PK, FirstName,
> LastName, EmpID). I am only pulling the data for the PK and FirstName for
my testing purposes (See
> SQL Statement in code).
> This is my code (editing.aspx.vb), the first Imports statement starts as L
ine 1. TIA, Jim
> Imports System.Data
> Imports System.Data.OleDb
> Partial Class tests_editing_editing
> Inherits System.Web.UI.Page
> Public Sub EditRecord(ByVal Sender As Object, ByVal E As DataGridComman
dEventArgs)
> employees.EditItemIndex = E.Item.ItemIndex
> LoadGrid()
> End Sub
> Public Sub CancelRecord(ByVal Sender As Object, ByVal E As DataGridComm
andEventArgs)
> employees.EditItemIndex = -1
> LoadGrid()
> End Sub
> Public Sub UpdateRecord(ByVal Sender As Object, ByVal E As DataGridComm
andEventArgs)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> 'Retrieve the field values in the edited row
> Dim PK As Int32 = Convert.ToInt32(E.Item.Cells(0).Text)
> Dim FirstNameTextBox As TextBox = CType(E.Item.Cells(1).Controls(0)
, TextBox)
> Dim FirstName As String = Convert.ToString(FirstNameTextBox.Text)
> employees.EditItemIndex = -1
> Update(PK, FirstName)
> employees.DataSource = ds.tables("TMaster")
> employees.DataBind()
> End Sub
> Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
>
> Dim tbl As DataTable = ds.Tables("TMaster")
> tbl.PrimaryKey = New DataColumn() _
> { _
> tbl.Columns("PK") _
> }
> Dim row As DataRow = tbl.Rows.Find(PK)
> row.Item("FirstName") = FirstName
> Dim cb As New OleDbCommandBuilder(adapter)
> objConnection.Open()
> adapter.Update(ds, "TMaster")
> objConnection.Close()
> End Sub
> Private Sub LoadGrid()
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> With employees
> .DataSource = ds.Tables("TMaster")
> .DataBind()
> End With
> End Sub
> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.Event
Args) Handles Me.Load
> If Not Page.IsPostBack Then
> LoadGrid()
> End If
> End Sub
> End Class
> ========================================
===
> ========================================
===
> Below is the editing.aspx code if needed ..
> ========================================
===
> ========================================
===
> <%@. Page Language="VB" AutoEventWireup="false" CodeFile="editing.aspx.vb"
> Inherits="tests_editing_editing" %>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" >
> <head runat="server">
> <title>Untitled Page</title>
> </head>
> <body>
> <form id="form1" runat="server">
> <div>
> <asp:DataGrid ID="employees" runat="server" CellPadding="5"
> AutoGenerateColumns="false" OnEditCommand="EditRecord" OnCancelCommand=
"CancelRecord"
> OnUpdateCommand="UpdateRecord">
> <Columns>
> <asp:BoundColumn DataField="PK" ReadOnly="true" Visible="false" />
> <asp:BoundColumn DataField="FirstName" HeaderText="First Name" ReadOnly
="False" />
> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Save" Cancel
Text="Cancel"
> EditText="Edit" />
> </Columns>
> </asp:DataGrid>
> </div>
> </form>
> </body>
> </html>
>
>
>
Jim i blogged about that error at:-
http://spaces.msn.com/members/naijacoder/
Look for the Error and read on.
Hope that helps
PAtrick
"Jim in Arizona" <tiltowait@.hotmail.com> wrote in message
news:expPkN2$FHA.1312@.TK2MSFTNGP09.phx.gbl...
> I've been using an example out of a book to be able to edit the rows in a
> database. I am getting the following error:
> ========================================
================
> ========================================
================
> Server Error in '/' Application.
> ----
--
> Operation must use an updateable query.
> Description: An unhandled exception occurred during the execution of the
> current web request. Please review the stack trace for more information
> about the error and where it originated in the code.
> Exception Details: System.Data.OleDb.OleDbException: Operation must use an
> updateable query.
> Source Error:
> Line 74:
> Line 75: objConnection.Open()
> Line 76: adapter.Update(ds, "TMaster")
> Line 77:
> Line 78: objConnection.Close()
> Source File: E:\hhsinternal\tests\editing\editing.aspx.vb Line: 76
> Stack Trace:
> [OleDbException (0x80004005): Operation must use an updateable query.]
>
System.Data.Common.DbDataAdapter. UpdatedRowStatusErrors(RowUpdatedEventAr
gs
> rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
> +1303846
> System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs
> rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) +46
> System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows,
> DataTableMapping tableMapping) +1750
> System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable
dataTable,
> DataTableMapping tableMapping) +40
> System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String
srcTable)
> +180
> tests_editing_editing.Update(Int32 PK, String FirstName) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:76
> tests_editing_editing.UpdateRecord(Object Sender,
> DataGridCommandEventArgs E) in
> E:\hhsinternal\tests\editing\editing.aspx.vb:39
>
System.Web.UI.WebControls.DataGrid. OnUpdateCommand(DataGridCommandEventArgs
> e) +105
> System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source,
EventArgs
> e) +679
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
+35
> System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source,
> EventArgs e) +117
> System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
+35
> System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +115
> System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String
> eventArgument) +134
>
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.Rai
sePostBackEvent(String
> eventArgument) +7
> System.Web.UI.Page. RaisePostBackEvent(IPostBackEventHandler
> sourceControl, String eventArgument) +11
> System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
+180
> System.Web.UI.Page.ProcessRequestMain(Boolean
> includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5670
> ----
--
> Version Information: Microsoft .NET Framework Version:2.0.50215.44;
ASP.NET
> Version:2.0.50215.44
> ========================================
================
> ========================================
================
> I can pretty much follow the code, but I don't understand what updateably
> query it is referring to.
> Line 75: adapter.Update(ds, "TMaster")
> I have a single MS Access 2003 DB with a single table TMaster and Four
> columns (PK, FirstName, LastName, EmpID). I am only pulling the data for
the
> PK and FirstName for my testing purposes (See SQL Statement in code).
> This is my code (editing.aspx.vb), the first Imports statement starts as
> Line 1. TIA, Jim
> Imports System.Data
> Imports System.Data.OleDb
> Partial Class tests_editing_editing
> Inherits System.Web.UI.Page
> Public Sub EditRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> employees.EditItemIndex = E.Item.ItemIndex
> LoadGrid()
> End Sub
> Public Sub CancelRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> employees.EditItemIndex = -1
> LoadGrid()
> End Sub
> Public Sub UpdateRecord(ByVal Sender As Object, ByVal E As
> DataGridCommandEventArgs)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> 'Retrieve the field values in the edited row
> Dim PK As Int32 = Convert.ToInt32(E.Item.Cells(0).Text)
> Dim FirstNameTextBox As TextBox =
CType(E.Item.Cells(1).Controls(0),
> TextBox)
> Dim FirstName As String = Convert.ToString(FirstNameTextBox.Text)
> employees.EditItemIndex = -1
> Update(PK, FirstName)
> employees.DataSource = ds.tables("TMaster")
> employees.DataBind()
> End Sub
> Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
>
> Dim tbl As DataTable = ds.Tables("TMaster")
> tbl.PrimaryKey = New DataColumn() _
> { _
> tbl.Columns("PK") _
> }
> Dim row As DataRow = tbl.Rows.Find(PK)
> row.Item("FirstName") = FirstName
> Dim cb As New OleDbCommandBuilder(adapter)
> objConnection.Open()
> adapter.Update(ds, "TMaster")
> objConnection.Close()
> End Sub
> Private Sub LoadGrid()
> Dim objConnection As OleDbConnection
> Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
> Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
> If objConnection Is Nothing Then
> objConnection = New OleDbConnection(strConnection)
> End If
> If objConnection.State = ConnectionState.Closed Then
> objConnection.Open()
> End If
> Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
> Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
> Dim ds As New DataSet()
> adapter.Fill(ds, "TMaster")
> objConnection.Close()
> With employees
> .DataSource = ds.Tables("TMaster")
> .DataBind()
> End With
> End Sub
> Protected Sub Page_Load(ByVal sender As Object, ByVal e As
> System.EventArgs) Handles Me.Load
> If Not Page.IsPostBack Then
> LoadGrid()
> End If
> End Sub
> End Class
> ========================================
===
> ========================================
===
> Below is the editing.aspx code if needed ..
> ========================================
===
> ========================================
===
> <%@. Page Language="VB" AutoEventWireup="false" CodeFile="editing.aspx.vb"
> Inherits="tests_editing_editing" %>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml" >
> <head runat="server">
> <title>Untitled Page</title>
> </head>
> <body>
> <form id="form1" runat="server">
> <div>
> <asp:DataGrid ID="employees" runat="server" CellPadding="5"
> AutoGenerateColumns="false" OnEditCommand="EditRecord"
> OnCancelCommand="CancelRecord"
> OnUpdateCommand="UpdateRecord">
> <Columns>
> <asp:BoundColumn DataField="PK" ReadOnly="true" Visible="false" />
> <asp:BoundColumn DataField="FirstName" HeaderText="First Name"
> ReadOnly="False" />
> <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Save"
> CancelText="Cancel" EditText="Edit" />
> </Columns>
> </asp:DataGrid>
> </div>
> </form>
> </body>
> </html>
>
>
>
"Patrick.O.Ige" <naijacoder@.hotmail.com> wrote in message
news:%233g2Ax6$FHA.3928@.tk2msftngp13.phx.gbl...
> Jim i blogged about that error at:-
> http://spaces.msn.com/members/naijacoder/
> Look for the Error and read on.
> Hope that helps
> PAtrick
>
I remember having such issues when I was working with classic ASP and in
most cases it was security permissions on the access DB. Because of that
prior experience, I made sure to check the permissions before I posted and
security permissions are full control for all auth users on our network, and
I'm an admin so have full control anyway. I double check again this morning
to make sure and I still get the same error. I'm at a loss.
> "Jim in Arizona" <tiltowait@.hotmail.com> wrote in message
> news:expPkN2$FHA.1312@.TK2MSFTNGP09.phx.gbl...
> --
> System.Data.Common.DbDataAdapter. UpdatedRowStatusErrors(RowUpdatedEventAr
g
s
> dataTable,
> srcTable)
> System.Web.UI.WebControls.DataGrid.OnUpdateCommand(DataGridCommandEventArg
s
> EventArgs
> +35
> +35
> System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.R
ai
> sePostBackEvent(String
> +180
> --
> ASP.NET
> the
> CType(E.Item.Cells(1).Controls(0),
>
"Marina" <someone@.nospam.com> wrote in message
news:%23V3g4P2$FHA.504@.TK2MSFTNGP12.phx.gbl...
> You didn't define an update query for the adapter to use. It doesn't know
> how to do the update on its own.
> You either have to supply the update command, or you have to use an
> OleDBCommandBuilder object. If can do some research on both these
> techniques for more information.
>
Hi Marina.
Under the Update subroutine:
Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
Dim objConnection As OleDbConnection
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
If objConnection Is Nothing Then
objConnection = New OleDbConnection(strConnection)
End If
If objConnection.State = ConnectionState.Closed Then
objConnection.Open()
End If
Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
Dim ds As New DataSet()
adapter.Fill(ds, "TMaster")
objConnection.Close()
Dim tbl As DataTable = ds.Tables("TMaster")
tbl.PrimaryKey = New DataColumn() _
{ _
tbl.Columns("PK") _
}
Dim row As DataRow = tbl.Rows.Find(PK)
row.Item("FirstName") = FirstName
Dim cb As New OleDbCommandBuilder(adapter)
objConnection.Open()
adapter.Update(ds, "TMaster")
objConnection.Close()
End Sub
You can see that I have the cb OleDbCommandBuilder object, although I don't
know if it is being used correctly. Is there more needed to that?
"Marina" <someone@.nospam.com> wrote in message
news:%23V3g4P2$FHA.504@.TK2MSFTNGP12.phx.gbl...
> You didn't define an update query for the adapter to use. It doesn't know
> how to do the update on its own.
> You either have to supply the update command, or you have to use an
> OleDBCommandBuilder object. If can do some research on both these
> techniques for more information.
>
Hi Marina.
Under the Update subroutine:
Public Sub Update(ByVal PK As Int32, ByVal FirstName As String)
Dim objConnection As OleDbConnection
Dim strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=e:\hhsinternal\tests\editing\edit
ing.mdb"
If objConnection Is Nothing Then
objConnection = New OleDbConnection(strConnection)
End If
If objConnection.State = ConnectionState.Closed Then
objConnection.Open()
End If
Dim strSQLSelect As String = "SELECT PK, FirstName FROM TMaster"
Dim adapter As New OleDbDataAdapter(strSQLSelect, objConnection)
Dim ds As New DataSet()
adapter.Fill(ds, "TMaster")
objConnection.Close()
Dim tbl As DataTable = ds.Tables("TMaster")
tbl.PrimaryKey = New DataColumn() _
{ _
tbl.Columns("PK") _
}
Dim row As DataRow = tbl.Rows.Find(PK)
row.Item("FirstName") = FirstName
Dim cb As New OleDbCommandBuilder(adapter)
objConnection.Open()
adapter.Update(ds, "TMaster")
objConnection.Close()
End Sub
You can see that I have the cb OleDbCommandBuilder object, although I don't
know if it is being used correctly. Is there more needed to that?
Jim are you giving the ASPNET acct the right permissions?
Patrick
"Jim in Arizona" <tiltowait@.hotmail.com> wrote in message
news:#a4VP2#$FHA.2708@.TK2MSFTNGP12.phx.gbl...
> "Patrick.O.Ige" <naijacoder@.hotmail.com> wrote in message
> news:%233g2Ax6$FHA.3928@.tk2msftngp13.phx.gbl...
> I remember having such issues when I was working with classic ASP and in
> most cases it was security permissions on the access DB. Because of that
> prior experience, I made sure to check the permissions before I posted and
> security permissions are full control for all auth users on our network,
and
> I'm an admin so have full control anyway. I double check again this
morning
> to make sure and I still get the same error. I'm at a loss.
a
>
-
the
System.Data.Common.DbDataAdapter. UpdatedRowStatusErrors(RowUpdatedEventAr
gs
System.Data.Common.DbDataAdapter. UpdatedRowStatus(RowUpdatedEventArgs[col
or=darkred]
System.Web.UI.WebControls.DataGrid. OnUpdateCommand(DataGridCommandEventArgs
args)
args)
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.Rai
>
-
updateably
for
as
TMaster"
objConnection)
Convert.ToString(FirstNameTextBox.Text)
TMaster"
objConnection)
TMaster"
objConnection)
CodeFile="editing.aspx.vb"
>
"Patrick.O.Ige" <naijacoder@.toughguy.net> wrote in message
news:%23zbAaI$$FHA.2736@.TK2MSFTNGP11.phx.gbl...
> Jim are you giving the ASPNET acct the right permissions?
> Patrick
>
Well I'll be ...
This is the first time I've actually messed with an access DB and ASP.NET so
I never thought I had to verifiy ASPNET account permissions. That was it
exactly.
Most of my DB programming thus far in ASP.NET has been with SQL.
Thanks Patrick.
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment