c# - 插入新记录时 MySQL 的 Subsonic 3.0.0.4 ActiveRecord 模板错误

标签 c# asp.net mysql subsonic subsonic3

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();

最佳答案

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

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

“真正的”异常可能是从“DUPLICATE KEY ...”到“Field XYZ does not have a default value”或“You have an error in your SQL Syntax near ...”

我还没有时间弄清楚为什么会发生这种情况(调试 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 查询浏览器实例并在那里执行。

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

关于c# - 插入新记录时 MySQL 的 Subsonic 3.0.0.4 ActiveRecord 模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4118179/

相关文章:

c# - 线程运行时回收IIS进程

c# -  字符附加到每个文件的开头

javascript - ASP.NET 的框架 javascript 不允许我渲染原始 HTML IFRAME

php - 在查询中使用 MATCH AGAINST 绑定(bind)字符串

php - 如何在 PHP 中保护我的 $_GET?

c# - Asp .net core 更改密码需要重启应用程序

c# - 使用 EF6 保存数据失败。错误 : OriginalValues cannot be used for entities in the Added state

c# - 维持稳定用户 session 的标准方法是什么?

asp.net - CommandArgument(与 ASP.NET Repeater 一起使用)是否需要验证?

php - 如何统计数据库中的条目总数