Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hur ändrar jag till int?

Postades av 2004-05-24 21:35:47 - Gert Lindholm, i forum asp.net generellt, Tråden har 15 Kommentarer och lästs av 1240 personer

Har klippt in följande textsträng från ett exempel mden textfältet var då string. i mitt exempel så vill jag ha heltat dvs int.

Cannot implicity convert 'string' to 'int'


int nr = ((TextBox)e.Item.Cells[1].Controls[0]).Text;


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-24 21:58:26 - Johan Normén

int nr = (int)((TextBox)e.Item.Cells[1].Controls[0]).Text;

eller:
int nr = Convert.ToInt32(((TextBox)e.Item.Cells[1].Controls[0]).Text);

Mvh Johan


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-24 22:21:40 - Raderat konto

eller:
int nr = int.Parse(((TextBox)e.Item.Cells[1].Controls[0]).Text);


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-24 22:35:18 - Gert Lindholm

Tack för hjälpen, Provade först Johans (int), men fick felmedd att den inte kunde 'convert to int' igen förutom att underförstått var borttaget.
Men med int.Parse() så löste sig problemet. Testade även med Convert.ToInt32. Och det fungerade också.

Vad är egentligen skillnaden på dessa tre satser?


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-24 22:48:46 - Gert Lindholm

Fel av mig:

Det fungerade när jag körde debug. Men när jag sen körde sidan så fick jag följande fel:

[OleDbException (0x80040e07): Typblandningsfel i villkorsuttryck.]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
berlingolf.NyKlubb.ExecuteNonQuery(String sql) in c:\inetpub\wwwroot\berlingolf\NyKund.aspx.cs:103
berlingolf.NyKlubb.btnAddKlubb_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\berlingolf\NyKund.aspx.cs:87
System.Web.UI.WebControls.Button.OnClick(EventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-25 00:56:05 - Johan Normén

Hej,

Problemet med (int) är att du då gör en unboxing, det betyder egentligen att typen är en int i grunden eller kan göras om till en int. Detta kan du dock inte göra om typen är eller vart en string. Vilket text returnerar. Det är därför du måste göra en convert eller en parse. Convert använder sig av parse så det spelar ingen roll vilken av dem du använder, jag brukar använde den som ger bäst spårbarhet och förståelse för andra utvecklare eller sig själv. Alltså Convert.

Att jag tog upp unboxing saken (int) beror på att jag ville visa allternativ som kan fungera, hade text gett typen object som retur hade (int) kunnat fungera om det var ett tal där.

Du kan ju slå upp Boxing samt Unboxing så får du mer förståelse. Även Casting är ett intressant område. Casting har samma syntax som boxing samt unboxing. (MembershipUser)User
dår jag enligt koden kastar om min User till en MembershipUser, det kräver ju dock att MembershipUser är en User eller att en User är en MembershipUser... Lär om Casting så får du veta mera...

Ha en skön kväll.
Mvh Johan


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-25 05:05:26 - Gert Lindholm

Det största problemet som jag ser det då. är varför jag måste göra en convert, när jag har i detta fall ett fält med numeriskt tal av typen heltal i db Access, och ett fält av typen text?

Kan man inte skriva på ett annat sätt när man skall ta ut värden?


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-25 08:53:07 - Patrik Löwendahl

Nej,

eftersom du hämtar data från literära kontroller så kan du inte hämta något annat än en text.

Enda sättet att slippa konverteringen från databasen är att antingen använda en IDbDataReader (OleDbReader, SqlReader osv), eller ett typat dataset.

Vad gäller <b>int.Parse</b> och <b>System.Convert.ToInt32</b>, så är den senare vanligtvis att föredra. Det är rätt som Johan säger att <b>System.Convert.ToInt32</b> använder sig av Int.Parse, men den har även inbyggd <b>null</b> hantering. Det hjälper oss lite på vägen.


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-25 13:07:05 - Patrik Löwendahl

Eh, läste precis Johans post nogrant.

<b>(type)</b> är inte en syntax för boxing/unboxing. Det är syntaxen för <b>typkonvertering</b>, men om typkonverteringen lyckas och den sker till/från valuetype och referencetype, då kommer CLR'n att boxa eller unboxa din data.

Boxning sker om du konvertera från en value type till en reference type. Det vill säga om du tex tar en struct och konverterar den till ett interface eller tar en integer och konverterar den till ett System.Object.

Eftersom interface variabler och System.Object räknas som referensvariabler och dess data skall ligga på heapen så kommer CLR att kopierar datat från stacken till heapen för att kunna sätta en referens till det. Det är det här som kallas boxing.

Unboxing är processen omvänd.

Precis som Johan säger är det en mycket kostsam operation och bör undvikas, men ibland kommer man ju inte undan.



Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 05:27:07 - Gert Lindholm

Jag plankade detta från Microsofts egna exempel Pets. Skillnaden är ju att detta är en datagrid fält mot ett textfält i db.

string name = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
Så jag bytte bara ut <b> string name <b> mot int nr.

Kan du förklara vad raden betyder och om du vill hur ska det stå?

Tack på förhand och trevlig Pings
Gert


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 09:17:30 - Patrik Löwendahl

<code>
int id = Convert.ToInt32(((TextBox)e.Item.Cells[1].Controls[0]).Text);
</code>

vill du göra det mot db så brukar det se ut så här:

<code>
int id = Convert.ToInt32(dr["idField"]);
</code>

där DR antingen är en System.Data.DataRow eller en System.Data.IDataReader (ex SqlDataReader). Fast är det en DataReader så kan du också använda:

<code>
int id = dr.GetInt32(0);
</code>

Men då måste du känna till kolumn indexet och kan inte använda namnet.


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 11:53:37 - Andreas Håkansson

Gerten,

Om vi börjar inne ifrån så har vi

e.Item.Cells[1].Controls[0]


Denna returnerar ett objekt av typen <b>Control</b> som är basklassen för alla WinForm kontroller. Basklassen innehåller bara metoder och properties som alla kontroller använder och när man ärvern en ny kontroll så lägger man oftast på egna sådana för den funktionalitet som kontrollen skall ha.

Ett sådant property är <b>Text</b> som inte finns på basklassen <b>Control</b> utan som i man lagt till på kontrollen i fråga - i ditt fall en <b>TextBox</b>. Så vad du behöver göra för att komma åt <b>Text</b> är att <b>typkonvertera Control</b> objektet till en <b>TextBox</b>.

((TextBox)e.Item.Cells[1].Controls[0])


Här har du konverterart objektet till rätt typ och du kan nu komma åt alla de extra saker som <b>TextBox</b> kontrollen erbjuder, så som <b>Text</b> propertiet som du nu kan läsa ut.

((TextBox)e.Item.Cells[1].Controls[0]).Text


<b>Text</b> propertiet returnerar en sträng och om du vet att det är ett numerisktvärde som vi vill ha till en numeriskvariabel får du konvertera denna med t.ex <b>Convert.ToInt32</b> metoden

int v = Convert.ToInt32(((TextBox)e.Item.Cells[1].Controls[0]).Text);


Det är vad som händer, och sen har .Patrik gett dig tips på hur du skriver.

Hoppas detta var till nytta =)

//Andreas


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 15:33:39 - Gert Lindholm

Eftersom jag fortfarande får Typblandningsfel i villkorsuttryck, och i Pets exempel för INSERT INTO Ser ut som följer:
string sql = "INSERT INTO Kund (GolfKlubb, KlubbNamn)"
+ " VALUES (\"new\", \"new\")";

Är det så att " VALUES (\"new\", \"new\")" fälten är för text?

I min test db har jag ett nummeriskt fält och ett textfält. Vad skall det då vara?

Trevlig Pingst


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 19:05:48 - Linda Knudsen

du skall kunna använda vad som helst där, kontrollera i db:n vad du anget där.. kontrollera sedan av så att värderna som kommer till sql satsen är det du vill att dom skall vara...

sen vet jag inte vad \"new\", skall betyda skriver iaf inte så i vb.net... kanske ngt i c#?!? =)

i vb.net och mot oledb databas brukar jag skriva så här:
insert into kund(golfklubbnr, klubbnamn) values (' & tal & ', '" & text & "')

där tal och text är en int samt en string variabel

vet inte om det e till ngn hjälp =D


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-28 19:23:34 - Andreas Håkansson

Linda och Gertan,

Det som Linda beskriver är ett korrekt exempel pår hur du skapar ett <b>insert</b> query med en numeriskparameter och en textparameter. Det som ser lite konstigt ut i Gertan:s exempel med <b>\"</b> är, som Linda mycket korrekt gissade, en C# sak.

I C# används \ för att ange en escape-kod. I detta fallet säger man att det som kommer direkt efter skall tolkas som en " .. hade man inte haft den hade man fått " VALUES "new","new)" vilket skulle ge en ofullständig sträng. Lösningen är att göra som i VB.NET nämligen att använda ' och " så vi får " VALUES ('new', 'new')".

//Andreas


Svara

Sv: Hur ändrar jag till int?

Postades av 2004-05-31 17:28:44 - Gert Lindholm

Har provat med det som stod i orginalexemplet fr microsoft och det som Linda och du skrev, men får fortfarande typblandningsfel på rad 103: Skickar med min kod så kanske Ni kan lösa det för mig, tack på förhand

Gert

private void btnAddKlubb_Click(object sender, System.EventArgs e)
{
string sql = "INSERT INTO Kund (GolfKlubb, KlubbNamn)"
+ " VALUES ('new', 'new')";
ExecuteNonQuery(sql);
ReadRecords();
}

private void ExecuteNonQuery(string sql)
{
OleDbConnection conn = null;
try
{
conn = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0; " +
@"Data Source=" + Server.MapPath("db/BerlinGolf.mdb"));
conn.Open();

OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.ExecuteNonQuery();
}

finally
{
if (conn != null) conn.Close();
}
}

private void datagrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
datagrid.EditItemIndex = -1;
ReadRecords();
}
private void datagrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
datagrid.EditItemIndex = e.Item.ItemIndex;
ReadRecords();
}
private void datagrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int KundId = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];

string sql = "DELETE FROM Kund WHERE KundId=" + ID;
ExecuteNonQuery(sql);
ReadRecords();
}

private void datagrid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int KundId = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];

int KlubbNr = int.Parse(((TextBox)e.Item.Cells[1].Controls[0]).Text);
string KlubbNamn = ((TextBox)e.Item.Cells[2].Controls[0]).Text;

string sql =
"UPDATE Kund SET Golfklubb=\"" + KlubbNr +
"\", KlubbNamn=\"" + KlubbNamn + "\"" +
" WHERE KundId=" + KundId;
ExecuteNonQuery(sql);

datagrid.EditItemIndex = -1;
ReadRecords();
}


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
1 206
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies