Jag håller på och lär mig ASP.NET 2.0 och har kört fast lite på databasdelen. Du får nog visa lite kod här för att man skall förstå vad det är du gör. Ok, inget är kodat manuellt, men jag bifogar det som kommit "automatiskt"... Nu har jag inte kollat igenom koden alls, men jag undrar om jag förstått problemet korrekt: ID är en automatisk räknare i Access, men det verkar som att det inte funkar automatiskt i ASP.net Tack för det! Problem med räknare/primärnyckel i Accessdatabas
sql server verkar ju bra (bättre?), men få webhotell inkluderar det så därför kör jag Accessdatabas.
När jag har primärnyckeln som en textbox så har jag inga problem att lägga till en ny post i tabellen, men om jag väljer en räknare för primärnyckel så går det åt skogen och felsidan kommer
"Exception Details: System.Data.OleDb.OleDbException: Du försöker tilldela Null-värdet till en variabel som inte är av datatypen Variant."
Jag har provat göra flera olika databaser med samma resultat, detta är den enklaste. 1 tabell, 3 textrutor och en räknare. Tar jag bort räknaren och sätter primärnyckeln på en textruta så funkar det. Men det är fel metod. Det tog många timmar att hitta detta felet :(
Att hoppa mellan poster och ta bort poster funkar.
Jag använder formview för att titta på och ändra data. Jag har inget annat krimskrams på sidan som kan störa.
Jag har Access 2000, ASP.net grejorna är bara någon vecka gamla.
Är det någon som har något bra tips på vad som är galet?Sv: Problem med räknare/primärnyckel i Accessdatabas
Sv:Problem med räknare/primärnyckel i Accessdatabas
Som sagt, allt (vad jag sett) funkar utom att lägga till ny post. Jag har gjort många olika provversioner och alla ha gjort likadant, detta är nog den enklaste.
Jag funderar lite på om det krävs någon uppdatering av access, men från 2000 ska det vara ok i teorin...
Jag har samma problem både lokalt när jag debuggar och på servern.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!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:AccessDataSource ID="AccessDataSource1" runat="server"
DataFile="C:\Documents and Settings\Administratör\Mina dokument\Visual Studio 2005\WebSites\WebSite9\db2.mdb"
DeleteCommand="DELETE FROM [Tabell1] WHERE [ID] = ? AND [textfalt] = ? AND [fält2] = ? AND [fält3] = ?" InsertCommand="INSERT INTO [Tabell1] ([textfalt], [fält2], [fält3], [ID]) VALUES (?, ?, ?, ?)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Tabell1]" CancelSelectOnNullParameter="False" ConflictDetection="CompareAllValues" UpdateCommand="UPDATE [Tabell1] SET [textfalt] = ?, [fält2] = ?, [fält3] = ? WHERE [ID] = ? AND [textfalt] = ? AND [fält2] = ? AND [fält3] = ?">
<DeleteParameters>
<asp:Parameter Name="original_ID" Type="Int32" />
<asp:Parameter Name="original_textfalt" Type="String" />
<asp:Parameter Name="original_fält2" Type="String" />
<asp:Parameter Name="original_fält3" Type="String" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="textfalt" Type="String" />
<asp:Parameter Name="fält2" Type="String" />
<asp:Parameter Name="fält3" Type="String" />
<asp:Parameter Name="ID" Type="Int32" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="textfalt" Type="String" />
<asp:Parameter Name="fält2" Type="String" />
<asp:Parameter Name="fält3" Type="String" />
<asp:Parameter Name="original_ID" Type="Int32" />
<asp:Parameter Name="original_textfalt" Type="String" />
<asp:Parameter Name="original_fält2" Type="String" />
<asp:Parameter Name="original_fält3" Type="String" />
</UpdateParameters>
</asp:AccessDataSource>
</div>
<asp:FormView ID="FormView1" runat="server" AllowPaging="True" CellPadding="4" DataKeyNames="ID"
DataSourceID="AccessDataSource1" ForeColor="#333333" Height="149px" Style="z-index: 24;
left: 157px; position: absolute; top: 128px" Width="482px">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<EditItemTemplate>
textfalt:
<asp:TextBox ID="textfaltTextBox" runat="server" Text='<%# Bind("textfalt") %>'>
</asp:TextBox><br />
fält2:
<asp:TextBox ID="fält2TextBox" runat="server" Text='<%# Bind("fält2") %>'>
</asp:TextBox><br />
fält3:
<asp:TextBox ID="fält3TextBox" runat="server" Text='<%# Bind("fält3") %>'>
</asp:TextBox><br />
ID:
<asp:Label ID="IDLabel1" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
Text="Update">
</asp:LinkButton>
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</EditItemTemplate>
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<InsertItemTemplate>
textfalt:
<asp:TextBox ID="textfaltTextBox" runat="server" Text='<%# Bind("textfalt") %>'>
</asp:TextBox><br />
fält2:
<asp:TextBox ID="fält2TextBox" runat="server" Text='<%# Bind("fält2") %>'>
</asp:TextBox><br />
fält3:
<asp:TextBox ID="fält3TextBox" runat="server" Text='<%# Bind("fält3") %>'>
</asp:TextBox><br />
<asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
Text="Insert">
</asp:LinkButton>
<asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</InsertItemTemplate>
<ItemTemplate>
textfalt:
<asp:Label ID="textfaltLabel" runat="server" Text='<%# Bind("textfalt") %>'></asp:Label><br />
fält2:
<asp:Label ID="fält2Label" runat="server" Text='<%# Bind("fält2") %>'></asp:Label><br />
fält3:
<asp:Label ID="fält3Label" runat="server" Text='<%# Bind("fält3") %>'></asp:Label><br />
ID:
<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID") %>'></asp:Label><br />
<asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"
Text="Edit">
</asp:LinkButton>
<asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
Text="Delete">
</asp:LinkButton>
<asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
Text="New">
</asp:LinkButton>
</ItemTemplate>
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
</asp:FormView>
</form>
</body>
</html>Sv: Problem med räknare/primärnyckel i Accessdatabas
Du har en tabell med 4 fält.
När du kör fälten normalt kan du lägga till nya rader med följande sql-sats:
INSERT INTO [Tabell1] ([textfalt], [fält2], [fält3], [ID]) VALUES (?, ?, ?, ?)
Du ändrar tabellen till att ha ett autoincrement nummer som id och då funkar inte dina inserts.
Har du kollat så du tar bort det fältet från insert-satsen? Har du autonummer på ID-kolumnen ska din sql-sats se ut så här:
INSERT INTO [Tabell1] ([textfalt], [fält2], [fält3]) VALUES (?, ?, ?)
Är ID ett autonummer ska du inte inkludera det i sql-satsen, Access kommer att skapa det själv.
Reserverar mig för total feltolkning, kan ha missförstått felet helt och hållet...Sv:Problem med räknare/primärnyckel i Accessdatabas
Jag har lagt till en textbox i inmatningen där jag kan knappa in ett löpnummer på ID manuellt, då funkar det. Något är lurt...
Jag ska titta på det i morgon igen, det går lite trögt nu. det blev inte så många timmars sömn i natt pga detta och morgonpigga barn....
Jag har föresten kört in alla servicepacken till Access då jag misstänker att det är något med databasfilen, men det blev ingen skillnad.Sv:Problem med räknare/primärnyckel i Accessdatabas
Nu funkar det, tydligen en bugg i VWD 2005...
There is a bug in VWD 2005. When you use the wizard to create the accessdatasource, it makes you add your primary key field to insert statement. Remove the primary key from the insert statement *dont forget to remove one of the "?".
Bones