webForumDet fria alternativet

Grabbar, har ni stött på detta??

.NET

6 svar · 486 visningar · startad av vift

Medlem sedan feb. 20056 inlägg
Frågan#1

Jag får följade felmeddelande när jag kör min kod:

Serverfel i tillämpningsprogrammet /.
--------------------------------------------------------------------------------

Det går inte att omvandla typen UInt32 till typen Integer.
Beskrivning: Ett undantag som inte kunde hanteras inträffade när den aktuella webbegäran kördes. Mer information om felet och var i koden det uppstod finns i stackspårningen.
Undantagsinformation: System.InvalidCastException: Det går inte att omvandla typen UInt32 till typen Integer.

Ingen som har nån ide på vad felet beror på eller vad jag behöver göra för att få den att fungera??

Koden:
<%@ Page language="VB" runat="server" %>
<%@ Register TagPrefix="my" Namespace="MySql.Data.MySqlClient" Assembly="MySql.Data, Version=1.0.4.20163, Culture=neutral, PublicKeyToken=c5687fc88969c44d" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="Microsoft.Data.Odbc" %>
<%@ Import Namespace="MySql.Data" %>
<%@ Import Namespace="MySql.Data.MySqlClient" %>

<script language="VB" runat="server">

Sub submit(obj as Object, e as EventArgs)
dim intID as integer = 0

  Dim strConn as string = "Database=användare;Data Source=localhost;User Id=root;Password=jao"
  Dim objConn As New MySqlConnection(strConn)
  
  Dim objCmd As New MySqlCommand("SELECT anvandarid from anvandare where loginnamn = ?login AND password = ?pass", objConn)
  
  
  	dim objParam as MySqlParameter
  	objParam = objCmd.Parameters.Add("?login", MySqlDbType.varchar)
  	objParam.value = tbLogin.text
  	objParam = objCmd.Parameters.Add("?pass", MySqlDbType.varchar)
  	objParam.value = tbPass.text


  	
  try
  	objCmd.Connection.Open()
  	intID = CType(objCmd.ExecuteScalar, integer)
  	objCmd.Connection.Close
  	catch ex as mysqlException
  	lblMessage.text = ex.message
  end try
  
  if intID \<\> 0 then
  	Response.Cookies("konto").Value = intID
  	response.Redirect("inloggad.aspx")
  	else
  	lblMessage.text = "fel användarnamn eller lösenord"
  end if

end sub
public sub SubmitRegister(Sender as Object, e as EventArgs)
Response.Redirect("registrera.aspx")
end sub
</script>

<html>
<form runat="server">

<asp:Label ID="lblMessage" runat="server"/>
<table height="100" background="login.gif" cellspacing=1 style="font: 8pt verdana">

<tr>
<td valign="top" width="160"><b>Användarnamn:</b></td>
</tr>
<td valign="top"><ASP:TextBox runat="server" Visible="true" id="tbLogin" Width="140" runat="server" BorderStyle="Solid" BorderWidth="1" BackColor="#BC5C5C" Font-Size="8"/></td>
</tr>
<tr>
<td><b>Lösenord: </b></td>
</tr>
<tr>
<td><ASP:TextBox runat="server" Visible="true" id="tbPass" TextMode="Password" Width="140" BorderStyle="Solid" BorderWidth="1" BackColor="#BC5C5C" runat="server" Font-Size="8"/></td>
</tr>
<tr>

<td align="left">
<ASP:Button runat="server" Visible="true" Text="Submit" runat="server" Font-Size="8" OnClick="Submit" BorderStyle="solid" BorderColor="#000000" BorderWidth="1" BackColor="#BC5C5C"/>
<asp:LinkButton runat="server" Text="Registrera dig" runat="server" Font-Size="8" OnClick="SubmitRegister" /></td>
</tr>
</table>
</form>
</html>

Medlem sedan juni 20019 024 inlägg
#2

Ja, du försöker omvandla UInt32 till typen Integer. UInt är en unsigned integer (icke-negativa tal), vilket innebär att du i din datatabell har satt anvandarid till "unsigned integer" eller motsvarande datatyp.

Troligtvis är det den här raden du har fel på:

intID = CType(objCmd.ExecuteScalar, integer)

Om du absolut vill ha integer så använd Convert.ToInt32 i stället.

Förresten, välkommen till webForum. ;)

Medlem sedan feb. 20056 inlägg
#3

Jo, förstod nästan det, problemet var väl att jag inte kunde begripa varför den skulle vara UInt32 från början iom att det uttryckligen stod att det var en integer i databasen. Dock hittade jag fältet Unsigned efter ditt inlägg! Fungerade mkt bättre efter att jag satte den till false :)

Tack för det, känns bra :)
Verkar dock vara lite sämre fart på asp.net-forumet jämfört med vanliga asp ;P

btw, finns det några fler skillnader på uint och int?

Medlem sedan juni 20019 024 inlägg
#4

UInt klarar inte negativa tal, men däremot betydligt högre positiva tal än vanlig integer. Det är enda skillnaden. :)

Vet inte riktigt om det påverkar lagringsutrymmet för datatypen, men det är ju bara med ett fåtal bytes så det har ingen som helst betydelse i dagens system, men kan vara värt att notera.

Medlem sedan juni 20008 205 inlägg
#5

Pace skrev:

Vet inte riktigt om det påverkar lagringsutrymmet för datatypen, men det är ju bara med ett fåtal bytes så det har ingen som helst betydelse i dagens system, men kan vara värt att notera.

Hela poängen med signed/unsigned (int/uint) är att de tar upp lika mycket plats. Skillnaden är att en bit i signed används för att ange tecken på talet (positivt eller negativt), medan den kan användas för ytterligare större tal i unsigned.

Medlem sedan feb. 20056 inlägg
#6

med andra ord kan en uint ha lika mkt högre värde än en int, som en int kan vara negativ, fast bägge tar upp lika mkt plats.

Medlem sedan juni 20008 205 inlägg
#7

Precis. Där en int börjar på ett ruggigt lågt negativt tal, börjar en uint på noll, och båda går lika långt från sina respektive startpunkter.

283 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
151 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)