【问题标题】:Subsonic 3.0.0.4 ActiveRecord Template for MySQL error on inserting new recordSubsonic 3.0.0.4 ActiveRecord Template for MySQL 在插入新记录时出错
【发布时间】:2010-11-07 14:36:59
【问题描述】:
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
{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

提供者包含

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}

这里是 堆栈跟踪

[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

这是调用错误的代码:

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

【问题讨论】:

    标签: c# asp.net mysql subsonic subsonic3


    【解决方案1】:

    这有点棘手。当前版本的 mysql.connector.net 会发生此异常。

    通常此时会抛出异常,但连接器本身似乎有一个 NullReferenceException 才能引发实际异常。

    “真正的”异常可能是从“DUPLICATE KEY ...”到“字段 XYZ 没有默认值”或“您的 SQL 语法有错误...”

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

    下载windows的unix工具:http://unxutils.sourceforge.net/并放在路径下(我们需要tail命令) 配置mysql写一个query.log到c:\temp

    [mysqld]
    log=c:/temp/query.log
    

    启动控制台并输入

    tail -f c:\temp\query.log
    

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

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

    【讨论】:

    • 嗨,谢谢你给我希望。 unxutils.sourceforge.net/UnxUtils.zip --> 这似乎是一个死链接 :( 。在这里找到它,sourceforge.net/projects/unxutils/files/unxutils/current/… 将尝试安装它
    • 好吧,作为替代方案,您可以在您喜欢的文本浏览器中打开 query.log。但由于文件在我的开发机器上迅速增长到 1GB 以上(因为每个查询都被记录),我更喜欢tail -f 方法,因为我会立即看到新的查询。顺便提一句。我不建议在生产服务器上激活它;)
    • 我正在使用 mysql gui 工具查看一般查询日志,我有一个为 null 的列,需要有一个值。 :)
    • ...而且“当前版本的 mysql.connector.net”中的错误在 9 年后仍未修复...
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多