首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚音速3.0.0.4 ActiveRecord模板用于插入新记录时的MySQL错误

问亚音速3.0.0.4 ActiveRecord模板用于插入新记录时的MySQL错误
EN

Stack Overflow用户
提问于 2010-11-07 14:36:59
回答 1查看 883关注 0票数 1
代码语言:javascript
复制
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();
}

“this”包含

代码语言:javascript
复制
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

提供程序包含

代码语言:javascript
复制
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}

下面是堆栈跟踪

代码语言:javascript
复制
[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

下面是调用错误的代码:

代码语言:javascript
复制
    student studentObject = new student();
    studentObject.first_name = txtFirstName.Text;
    studentObject.middle_name = txtMiddleName.Text;
    studentObject.last_name = txtLastName.Text;
    studentObject.Save();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-10 11:30:34

这有点棘手。这种异常发生在当前版本的mysql.connector.net中。

通常,此时会处理异常,但连接器在抛出实际异常之前似乎有一个NullReferenceException本身。

“真正的”例外可能是从“重复键.”“字段XYZ没有默认值”或“您在SQL语法中有一个错误在附近.”

我还没有时间弄清楚为什么会发生这种情况(调试Connector.Net或尝试更新的),但同时我建议您像我这样做如下:

下载用于windows:http://unxutils.sourceforge.net/的unix工具,并将它们放在路径中(我们需要尾部命令),配置mysql将query.log写到c:\temp中

代码语言:javascript
复制
[mysqld]
log=c:/temp/query.log

启动控制台并键入

代码语言:javascript
复制
tail -f c:\temp\query.log

现在,您将看到针对本地数据库执行的每条语句,如果得到NullReferenceException,则将最后一条语句从控制台窗口复制到mysql实例并在那里执行。

希望这有帮助,我会更新这篇文章,如果我知道如何解决这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4118179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档