Gå til innhold

[LØST] enkel ADO.NET, får ikke MySqlParameter til å funke


Anbefalte innlegg

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 :blush:

Endret av hockey500
Lenke til kommentar
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...