2010-11-07 31 views
1
public void Add(IDataProvider provider){ 


    var key=KeyValue(); 
    if(key==null){ 
     var newKey=_repo.Add(this,provider); 
     this.SetKeyValue(newKey); 
    }else{ 
     _repo.Add(this,provider); //NullReferenceException was unhandled by user code 
    } 
    SetIsNew(false); 
    OnSaved(); 
} 

'ce' contientSubsonic 3.0.0.4 ActiveRecord modèle d'erreur MySQL sur l'insertion nouveau record

this 
{Geocine} 
    _age: null 
    _birthday: null 
    _church_id: null 
    _db: {Seminary.Data.SeminaryDB} 
    _dirtyColumns: Count = 0 
    _finalgrade: null 
    _finalgrade_equivalent: null 
    _first_name: "Geocine" 
    _gender: null 
    _isLoaded: false 
    _isNew: true 
    _last_name: "Cruz" 
    _level: null 
    _middle_name: "Reilly" 
    _repo: {SubSonic.Repository.SubSonicRepository<Seminary.Data.student>} 
    _semester_enrolled: null 
    _seminary_id: null 
    _student_id: 0 
    _year_enrolled: null 
    age: null 
    birthday: null 
    church_id: null 
    Columns: Count = 14 
    finalgrade: null 
    finalgrade_equivalent: null 
    first_name: "Geocine" 
    gender: null 
    last_name: "Cruz" 
    level: null 
    middle_name: "Reilly" 
    semester_enrolled: null 
    seminary_id: null 
    student_id: 0 
    tbl: {student} 
    TestMode: false 
    year_enrolled: null 

fournisseur contient

provider 
{SubSonic.DataProviders.DbDataProvider} 
    [SubSonic.DataProviders.DbDataProvider]: {SubSonic.DataProviders.DbDataProvider} 
    Client: MySqlClient 
    ConnectionString: "Data Source=localhost;Database=school;User Id=root;Password=123456;Port=3306;" 
    CurrentSharedConnection: null 
    DbDataProviderName: "MySql.Data.MySqlClient" 
    Factory: {MySql.Data.MySqlClient.MySqlClientFactory} 
    Log: null 
    Name: "MySql.Data.MySqlClient" 
    ParameterPrefix: "@" 
    Schema: {SubSonic.Schema.DatabaseSchema} 
    SchemaGenerator: {SubSonic.SqlGeneration.Schema.MySqlSchema} 

Voici le stacktrace

[NullReferenceException: Object reference not set to an instance of an object.] 
    MySql.Data.MySqlClient.MySqlConnection.get_ServerThread() +6 
    MySql.Data.MySqlClient.MySqlConnection.Abort() +54 
    MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +839 
    MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +4 
    System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10 
    SubSonic.DataProviders.DbDataProvider.ExecuteReader(QueryCommand qry) +175 
    SubSonic.Repository.SubSonicRepository`1.Add(T item, IDataProvider provider) +165 
    Seminary.Data.student.Add(IDataProvider provider) in C:\Users\SomeUser\Documents\Visual Studio 2008\Projects\Seminary\ActiveRecord\ActiveRecord.cs:2490 
    Seminary.Data.student.Save(IDataProvider provider) in C:\Users\SomeUser\Documents\Visual Studio 2008\Projects\Seminary\ActiveRecord\ActiveRecord.cs:2505 
    Seminary.Data.student.Save() in C:\Users\SomeUser\Documents\Visual Studio 2008\Projects\Seminary\ActiveRecord\ActiveRecord.cs:2499 
    Seminary.Default.btnAdd_Click(Object sender, EventArgs e) in C:\Users\SomeUser\Documents\Visual Studio 2008\Projects\Seminary\Default.aspx.cs:34 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 

Voici le code qui a appelé l'erreur:

student studentObject = new student(); 
    studentObject.first_name = txtFirstName.Text; 
    studentObject.middle_name = txtMiddleName.Text; 
    studentObject.last_name = txtLastName.Text; 
    studentObject.Save(); 

Répondre

1

C'est un peu délicat. Cette exception se produit avec la version actuelle de mysql.connector.net.

Normalement, une exception serait tracée à ce stade, mais le connecteur semble avoir une exception NullReferenceException avant de pouvoir lancer l'exception réelle.

Le « vrai » exception pourrait être quelque chose de « DUPLICATE KEY ... » « Trame XYZ n'a pas de valeur par défaut » ou « Vous avez une erreur dans votre syntaxe SQL de ... »

Je n'ai pas encore eu le temps de comprendre pourquoi cela se produit (déboguer le Connector.Net ou en essayer un nouveau) mais en attendant je vous suggère de faire comme suit:

Télécharger les outils unix pour windows : http://unxutils.sourceforge.net/ et les mettre dans le chemin (nous avons besoin de la commande de queue) Configurer mysql pour écrire une requête.log à c: \ temp

Lancer une console et tapez

tail -f c:\temp\query.log 

Maintenant, vous voyez chaque instruction qui est exécutée sur la base de données locale et si vous obtenez le NullReferenceException copie la dernière instruction forment la fenêtre de la console à une instance du navigateur de requêtes MySQL et exécuter là-bas.

J'espère que cela aidera, je mettrai à jour cet article si j'ai trouvé comment résoudre ce problème.

+0

Salut, merci de me donner de l'espoir. http://unxutils.sourceforge.net/UnxUtils.zip -> cela semble être un lien mort :(. Trouvé ici, http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils. zip/téléchargement va essayer de l'installer –

+0

Eh bien, comme alternative, vous pouvez ouvrir le query.log dans votre navigateur texte préféré.Mais comme le fichier se développe rapidement au-dessus de 1 Go à mon ordinateur dev (parce que chaque requête est enregistrée) je préfère le l'approche 'tail -f' puisque je vois instantanément de nouvelles requêtes Je ne recommanderais pas de l'activer sur un serveur de production;) –

+0

J'utilise les outils mysql gui en regardant le journal de requête général, j'ai une colonne qui est nulle cela doit avoir une valeur. :) –