webForumDet fria alternativet

Typblandningsfel i villkorsuttryck.

.NET

4 svar · 519 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Nu måste jag bara be om hjälp, jag får Typblandningsfel i villkorsuttryck och jag kan inte hitta var felet är.

 string sNick = Session["nick"].ToString();
            string sRubrik = txtRubrik.Text;
            int iKatId = Convert.ToInt32(DropDownList1.SelectedValue);
            bool bOrginal = true;
            int iSvarpa = 0;
            DateTime dDatum = DateTime.Now;
            int rubrikIcon = Convert.ToInt32(RadioButtonList1.SelectedValue);
            string sInlagg = txtMedelande.Text;
            sql = "INSERT INTO t_forum (nick,rubrik,katId,orginal,svarpa,datum,senast,icon,hits,inlagg)VALUES(?,?,?,?,?,?,?,?,?,?)";

            OleDbCommand cmd = new OleDbCommand(sql, DBConn);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("nick", sNick);
            cmd.Parameters.AddWithValue("rubrik", sRubrik);
            cmd.Parameters.AddWithValue("katId", iKatId);
            cmd.Parameters.AddWithValue("orginal", bOrginal);
            cmd.Parameters.AddWithValue("svarpa", iSvarpa);
            cmd.Parameters.AddWithValue("datum", dDatum);
            cmd.Parameters.AddWithValue("senast", dDatum);
            cmd.Parameters.AddWithValue("icon", rubrikIcon);
            cmd.Parameters.AddWithValue("hits", 0);
            cmd.Parameters.AddWithValue("inlagg", sInlagg);
            DBConn.Open();
            cmd.ExecuteNonQuery();

Typblandningsfel brukar ju vara om man har fel på sträng, tal osv men jag
vet inte hur man skall styra det. :l

Medlem sedan dec. 20025 483 inlägg
#2

Det är inte så att du försöker stoppa in en typ av värde där det egentligen skall vara en annan typ av värde? T.ex. att "rubrikIcon" är av typen sträng men du försöker stoppa in en integer? Det kan även vara så att datumformatet på kolumnen "datum" inte tillåter tiddelen, utan bara datumet (du försöker alltså att stoppa in mer information än vad fältet tillåter).

Vilken databas?

Medlem sedan jan. 20023 327 inlägg
#3

Använder du debuggern? Om inte, gör det, då ser du exakt på vilken rad felet inträffar.

Medlem sedan mars 20011 880 inlägg
#4

Det här skulle jag kanske börjat med:

id   räknare
nick   text
rubrik   text
katId   tal
orginal   ja/nej
svarPa   tal
datum   datum/tid
senast   datum/tid
icon   tal
inlagg pm

Om jag skriver ut resultatet på en label

Nick saw 
rubrik Test 
katid 1 
orginal True 
svarpå 0 
datum 2010-03-11 21:10:42 
senast 2010-03-11 21:10:42 
icon 1 
hits 0 
inlägg Test

Detta ser ju helt ok ut.
Sen måste jag erkänna mitt delemma att jag är väldigt dålig på debug,
jag vet nog inte riktigt hur jag skall använda den här...

När jag använde mig av stepIn(tror jag det heter) så hittade jag detta.

StackTrace	"   
vid System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)\r\n   
vid System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)\r\n   
vid System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)\r\n   
vid System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)\r\n   
vid System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)\r\n   
vid System.Data.OleDb.OleDbCommand.ExecuteNonQuery()\r\n   
vid Admin_Forum_allaForum.Nytt() i c:\\inetpub\\wwwroot\\ccc\\Admin\\Forum\\allaForum.aspx.cs:rad 161"	string

..men jag förstår nog inte vad som menas.

Medlem sedan mars 20011 880 inlägg
#5

Lösning var tydligen att göra så här

OleDbCommand cmd = new OleDbCommand(sql, DBConn);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("nick", sNick);
            cmd.Parameters.AddWithValue("rubrik", sRubrik);
            cmd.Parameters.Add("katId", OleDbType.Integer).Value = iKatId;
            cmd.Parameters.Add("orginal", OleDbType.Boolean).Value = bOrginal;
            cmd.Parameters.Add("svarpa", OleDbType.Integer).Value = iSvarpa;
            cmd.Parameters.Add("datum", OleDbType.Date).Value = dDatum;
            cmd.Parameters.Add("senast", OleDbType.Date).Value = dDatum;
            cmd.Parameters.Add("icon", OleDbType.Integer).Value = rubrikIcon;
            cmd.Parameters.Add("hits", OleDbType.Integer).Value = 0;
            cmd.Parameters.AddWithValue("inlagg", sInlagg);

Vad tror ni?
Den lägger in allt i databasen men jag får fortfarande att indatasträngen har
ett felaktigt format.

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)