hockey500 Skrevet 11. januar 2008 Rapporter Del Skrevet 11. januar 2008 (endret) Hei, lager et lite program som blant annet skal hente ut litt info fra IMDb, og lagre i en MySQL database. databasetabellen ser slik ut: CREATE TABLE `Film` ( `FilmID` int(11) NOT NULL auto_increment, `Title` varchar(100) NOT NULL, `Year` year(4) NOT NULL, `Director` varchar(30) NOT NULL, `AspectRatio` varchar(8) NOT NULL, `Runtime` int(11) NOT NULL, `Country` varchar(30) NOT NULL, `IMDbURI` varchar(40) NOT NULL, `Rating` float NOT NULL, `PlotSummary` blob NOT NULL, PRIMARY KEY (`FilmID`), UNIQUE KEY `IMDb URI` (`IMDbURI`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; Slik ser koden ut for å sette inn i tabellen: // Har allerede satt opp connection og den funker fint string commandText = @"INSERT INTO `Film` (`Title`, `Year`, `Director`, `AspectRatio`, `Runtime`, `Country`, `IMDbURI`, `Rating`, `PlotSummary`) VALUES(@Title, @Year, @Director, @AspectRatio, @Runtime, @Country, @IMDbURI, @Rating, @PlotSummary)"; MySqlCommand cmd = new MySqlCommand( commandText, this.sqlConnection ); cmd.Parameters.AddWithValue( "@Title", this.Title ); cmd.Parameters.AddWithValue( "@Year", this.Year ); cmd.Parameters.AddWithValue( "@Director", this.Director ); cmd.Parameters.AddWithValue( "@AspectRatio", this.AspectRatio ); cmd.Parameters.AddWithValue( "@Runtime", this.Runtime ); cmd.Parameters.AddWithValue( "@Country", this.Country ); cmd.Parameters.AddWithValue( "@IMDbURI", this.IMDbURI ); cmd.Parameters.AddWithValue( "@Rating", this.Rating ); cmd.Parameters.AddWithValue( "@PlotSummary", this.PlotSummary ); cmd.ExecuteNonQuery(); å sette inn variablene direkte i spørringen funker utmerket, så ser ikke helt hva jeg gjør feil her. har også prøvd 2 andre måter å sette opp MySqlParameter på: Måte 1: MySqlParameter paramTitle = new MySqlParameter(); paramTitle.ParameterName = "@Title"; paramTitle.Value = this.Title; // Og fortsette sånn nedover for hvert felt // Måte 2: MySqlParameter paramTitle = cmd.CreateParameter(); paramTitle.ParameterName = "@Title"; paramTitle.Value = this.Title; det funker akkurat like dårlig. Er jeg helt på ville veier her eller? Ser ikke helt hva som er feil med det jeg gjør. EDIT: Løsning: MySql Connector bruker visst ? istedenfor @ til parametere Endret 12. januar 2008 av hockey500 Lenke til kommentar
j000rn Skrevet 12. januar 2008 Rapporter Del Skrevet 12. januar 2008 Feilmelding? Evt. hva skjer? Lenke til kommentar
hockey500 Skrevet 12. januar 2008 Forfatter Rapporter Del Skrevet 12. januar 2008 Ahh, det var en liten detalj jeg glemte: MySqlException: Column 'Title cannot be null MySql.Data.MySqlClient.MySqlException was unhandled Message="Column 'Title' cannot be null" Source="MySql.Data" ErrorCode=-2147467259 Number=1048 StackTrace: at MySql.Data.MySqlClient.MySqlStream.OpenPacket() at MySql.Data.MySqlClient.NativeDriver.ReadResult(UInt64& affectedRows, Int64& lastInsertId) at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet() at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() at IMDb.IMDb.InsertIntoDb() in D:\Documents and Settings\Hakon\My Documents\Visual Studio 2008\Projects\IMDb\IMDb\Class1.cs:line 240 at IMDb.IMDb.IMDbFilm2MySql(Boolean ignoreIfAmbiguous) in D:\Documents and Settings\Hakon\My Documents\Visual Studio 2008\Projects\IMDb\IMDb\Class1.cs:line 134 at MovieDB.IMDbForm.IMDb2SQLStartButton_Click(Object sender, EventArgs e) in D:\Documents and Settings\Hakon\My Documents\Visual Studio 2008\Projects\MovieDB\MovieDB\IMDbForm.cs:line 41 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) at System.Windows.Forms.Form.ShowDialog() at MovieDB.Form1.getIMDbDataToolStripMenuItem_Click(Object sender, EventArgs e) in D:\Documents and Settings\Hakon\My Documents\Visual Studio 2008\Projects\MovieDB\MovieDB\Form1.cs:line 994 at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e) at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e) at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e) at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met) at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met) at System.Windows.Forms.ToolStripMenuItem.ProcessCmdKey(Message& m, Keys keyData) at System.Windows.Forms.ToolStripManager.ProcessShortcut(Message& m, Keys shortcut) at System.Windows.Forms.ToolStripManager.ProcessCmdKey(Message& m, Keys keyData) at System.Windows.Forms.ContainerControl.ProcessCmdKey(Message& msg, Keys keyData) at System.Windows.Forms.Form.ProcessCmdKey(Message& msg, Keys keyData) at System.Windows.Forms.Control.ProcessCmdKey(Message& msg, Keys keyData) at System.Windows.Forms.Control.PreProcessMessage(Message& msg) at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IM oComponent.FPreTranslateMessage(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at MovieDB.Program.Main() in D:\Documents and Settings\Hakon\My Documents\Visual Studio 2008\Projects\MovieDB\MovieDB\Program.cs:line 33 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: Lenke til kommentar
j000rn Skrevet 12. januar 2008 Rapporter Del Skrevet 12. januar 2008 Ahh, det var en liten detalj jeg glemte: MySqlException: Column 'Title cannot be null Og du har dobbeltsjekket at this.Title ikke er null? Lenke til kommentar
hockey500 Skrevet 12. januar 2008 Forfatter Rapporter Del Skrevet 12. januar 2008 ja, og det er den ikke. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå