2010-08-10 18 views
1

j'ai créé un datalayer en utilisant subsonic. Cependant, lorsque je sélectionne mes données, je reçois l'exception suivante.problème lors de la liaison mysql tinyint avec subsonic 3 et datagridview

System.ArgumentException was unhandled 
    Message="Object of type 'System.Boolean' cannot be converted to type 'System.SByte'." 
    Source="mscorlib" 
    StackTrace: 
     at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) 
     at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) 
     at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
     at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
     at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) 
     at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) 
     at SubSonic.Extensions.Database.Load[T](IDataReader rdr, T item, List`1 ColumnNames) 
     at SubSonic.Extensions.Database.ToEnumerable[T](IDataReader rdr, List`1 ColumnNames) 
     at SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand`1 query, Object[] paramValues) 
     at lambda_method(ExecutionScope) 
     at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) 
     at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) 
     at SubSonic.Linq.Structure.Query`1.GetEnumerator() 
     at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
     at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
     at TorontoTrader.Data.Ver2.ninjascan.Find(Expression`1 expression) in E:\TradingTools\CODE\TorontoTraderDataVer2\TorontoTraderDataVer2\ActiveRecord.cs:line 4148 
     at TorontoTraderAlerts.Form1.Form1_Load(Object sender, EventArgs e) in E:\TradingTools\CODE\TorontoTraderDataVer2\TorontoTraderAlerts\Form1.cs:line 24 
     at System.Windows.Forms.Form.OnLoad(EventArgs e) 
     at System.Windows.Forms.Form.OnCreateControl() 
     at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
     at System.Windows.Forms.Control.CreateControl() 
     at System.Windows.Forms.Control.WmShowWindow(Message& m) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ScrollableControl.WndProc(Message& m) 
     at System.Windows.Forms.ContainerControl.WndProc(Message& m) 
     at System.Windows.Forms.Form.WmShowWindow(Message& m) 
     at System.Windows.Forms.Form.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.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow) 
     at System.Windows.Forms.Control.SetVisibleCore(Boolean value) 
     at System.Windows.Forms.Form.SetVisibleCore(Boolean value) 
     at System.Windows.Forms.Control.set_Visible(Boolean value) 
     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 TorontoTraderAlerts.Program.Main() in E:\TradingTools\CODE\TorontoTraderDataVer2\TorontoTraderAlerts\Program.cs:line 18 
     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: 

the code segment wher its throwing it is 

public static IList<ninjascan> Find(Expression<Func<ninjascan, bool>> expression) { 

      var repo = GetRepo(); 
      return repo.Find(expression).ToList(); 
     } 

the column in Mysql is TinyInt (Length=1) 

dunno how to fix it. 

Répondre

4

Dans la chaîne de connexion mysql ajouter un paramètre "Traiter minuscule As Boolean", par exemple:

Server=srv;Database=db;Uid=user;Pwd=pass;Treat Tiny As Boolean=true; 

ce qui devrait forcer le connecteur MySQL.Data retourner true ou false pour TINYINT (1) au lieu .

mysql docs affirment que cela semble être le comportement par défaut

http://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html

mais je suis sûr que le faux est la valeur par défaut dans les versions antérieures.