hockey500 Skrevet 11. januar 2008 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
hockey500 Skrevet 12. januar 2008 Forfatter 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:
j000rn Skrevet 12. januar 2008 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?
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å