Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将记录添加到MySQL始终引发-";输入字符串格式不正确错误";_C#_Mysql_Entity Framework_Pomelo Entityframeworkcore Mysql - Fatal编程技术网

C# 将记录添加到MySQL始终引发-";输入字符串格式不正确错误";

C# 将记录添加到MySQL始终引发-";输入字符串格式不正确错误";,c#,mysql,entity-framework,pomelo-entityframeworkcore-mysql,C#,Mysql,Entity Framework,Pomelo Entityframeworkcore Mysql,每次我尝试将记录添加到DB中时,事务都会失败,并出现“输入字符串格式不正确错误”,即使我尝试过不使用任何字符串 让您更深入地了解我要做的事情,基本上我的应用程序的用户在启动时请求他的会话id,这会跟踪他的活动,在下面的阶段中,服务器收到请求并从MySQL获取会话id,然后它将其传递回客户机,客户机使用此号码对其自己的通道进行身份验证 我从下面的日志中看到的似乎是引发此异常的一些无效转换 我正在使用: .NET核心2.1 Pomelo.EntityFrameworkCore.MySql 3.1.0

每次我尝试将记录添加到DB中时,事务都会失败,并出现“输入字符串格式不正确错误”,即使我尝试过不使用任何字符串

让您更深入地了解我要做的事情,基本上我的应用程序的用户在启动时请求他的会话id,这会跟踪他的活动,在下面的阶段中,服务器收到请求并从MySQL获取会话id,然后它将其传递回客户机,客户机使用此号码对其自己的通道进行身份验证

我从下面的日志中看到的似乎是引发此异常的一些无效转换

我正在使用:

  • .NET核心2.1
  • Pomelo.EntityFrameworkCore.MySql 3.1.0
  • 为linux gnu x86_x64编译的Oracle MySQL 5.1.73(没有机会更新)
  • 我希望有人能帮忙

    下面是麻烦代码以及实体、表设计和错误日志的定义:

        public static uint CreateSession(UsageTracking usageTracking)
        {
            using (MySQL SQL = new MySQL())
            {
                SQL.UsageTracking.Add(usageTracking);
                SQL.SaveChanges();
    
                return usageTracking.SessionID;
            }
        }
    
       public class UsageTracking
        {
            [Key]
            public uint SessionID { get; set; }
            [MaxLength(7)] [Required]
            public string USID{ get; set; }
            [Required]
            public long Date { get; set; }
        }
    
    
    class MySQL : DbContext
    {
        public static string connectionHost;
        public static string connectionPort;
        public static string connectionDB;
        public static string connectionUsn;
        public static string connectionPsw;
    
        public DbSet<DB.UsageTracking> UsageTracking { get; set; }
    
        protected override void OnConfiguring(DbContextOptionsBuilder options)
        {
            options
                .UseMySql($"server={connectionHost};port={connectionPort};database={connectionDB};user= 
                     {connectionUsn};password={connectionPsw}", mySQLOptions => mySQLOptions
                    .ServerVersion(new Version(5,1,73), ServerType.MySql)
                );
        }
    }
    
    错误日志:

            <logevent time="2020-01-15 16:24:17.2857" level="ERROR">
              <message>Input string was not in a correct format.</message>
              <type>System.FormatException</type>
              <trace>   at System.Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer&amp; number, NumberFormatInfo info, Boolean parseDecimal)
               at System.Number.ParseUInt32(ReadOnlySpan`1 value, NumberStyles options, NumberFormatInfo numfmt)
               at System.String.System.IConvertible.ToUInt32(IFormatProvider provider)
               at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
               at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.ChangeType(Object objectValue) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 703
               at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.GetValue(MySqlConnectionStringBuilder builder) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 674
               at MySqlConnector.Core.ConnectionSettings..ctor(MySqlConnectionStringBuilder csb) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionSettings.cs:line 39
               at MySqlConnector.Core.ConnectionPool.GetPool(String connectionString) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs:line 405
               at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 292
               at MySql.Data.MySqlClient.MySqlConnection.Open() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 280
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
               at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction()
               at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
               at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext _, Boolean acceptAllChangesOnSuccess)
               at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
               at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
               at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
               at ReportingServer.DB.CreateSession(UsageTracking usageTracking) in C:\Users\User\source\repos\Reporting Server\MySQL.cs:line 20
               at ReportingServer.APIs.GetSessionID() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 66
               at ReportingServer.APIs.Process() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 41
               at ReportingServer.HTTPServer.&lt;Listen&gt;b__10_0(Object HTTPRequest) in C:\Users\User\source\repos\Reporting Server\HTTPServer.cs:line 135</trace>
              <source>System.Private.CoreLib</source>
              <location>
              <ReportedIn>ReportingServer.Log</ReportedIn>
              <OnLine>17</OnLine>
            </location>
            </logevent>
    
    
    输入字符串的格式不正确。
    System.FormatException
    位于System.Number.StringToNumber(只读span`1 str、NumberStyles选项、NumberBuffer&;Number、NumberFormatInfo信息、布尔解析十进制)
    在System.Number.ParseUInt32(只读span`1值、NumberStyles选项、NumberFormatInfo numfmt)
    位于System.String.System.IConvertible.ToUInt32(IFormatProvider)
    位于System.Convert.ChangeType(对象值、类型conversionType、IFormatProvider)
    在C:\projects\mysqlconnector\src\mysqlconnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs中的MySql.Data.MySqlConnectionStringValueOption`1.ChangeType(objectobjectobjectvalue)处:第703行
    在C:\projects\mysqlconnector\src\mysqlconnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs中的MySql.Data.mysqlconnectionstringvalue选项`1.GetValue(MySqlConnectionStringBuilder生成器):第674行
    在C:\projects\MySqlConnector\src\MySqlConnector\Core\ConnectionSettings.cs中的MySqlConnector.Core.ConnectionSettings..ctor(MySqlConnectionStringBuilder csb)处:第39行
    在C:\projects\MySqlConnector\src\MySqlConnector\Core\ConnectionPool.cs中的MySqlConnector.Core.ConnectionPool.GetPool(字符串connectionString)处:第405行
    在C:\projects\mysqlconnector\src\mysqlconnector\MySql.Data.MySqlClient\MySqlConnection.OpenAsync中的MySql.Data.MySqlConnection.OpenAsync(Nullable`1 ioBehavior,CancellationToken CancellationToken)中:第292行
    在C:\projects\mysqlconnector\src\mysqlconnector\MySql.Data.MySqlClient\MySqlConnection.cs中的MySql.Data.MySqlClient.MySqlConnection.Open()处:第280行
    位于Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(布尔错误预期)
    位于Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误预期)
    位于Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(布尔错误预期)
    位于Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel IsolationLevel)
    在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction()中
    在Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches,IRelationalConnection)
    位于Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1条目)
    位于Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
    在Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext),布尔接受ChangesOnSuccess)
    在Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState状态,Func`3操作,Func`3验证成功)
    位于Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(布尔接受更改成功)
    在Microsoft.EntityFrameworkCore.DbContext.SaveChanges(布尔接受更改成功)
    在Microsoft.EntityFrameworkCore.DbContext.SaveChanges()中
    在C:\Users\User\source\repos\Reporting Server\MySQL.cs中的ReportingServer.DB.CreateSession(UsageTracking-UsageTracking)中:第20行
    在C:\Users\User\source\repos\Reporting Server\api.cs中的ReportingServer.api.GetSessionID()处:第66行
    在C:\Users\User\source\repos\Reporting Server\api.cs中的ReportingServer.api.Process()处:第41行
    在C:\Users\User\source\repos\Reporting Server\HTTPServer.cs中的ReportingServer.HTTPServer.Listenb\uuuuuu10\u0(对象HTTPRequest)中:第135行
    System.Private.CoreLib
    ReportingServer.Log
    17
    
    确保下面的代码工作正常。设置一个断点进行检查

    $“服务器={connectionHost};端口={connectionPort};数据库={connectionDB};用户=
    {connectionUsn};密码={connectionPsw}“

    已解决。Oleksa的回答是正确的,我在配置后检查了连接,它是不正确的,配置部分被错误地更改了,我只是一直在看错误的代码部分


    谢谢

    堆栈跟踪显示,MySqlConnector无法将提供的连接字符串选项之一转换为
    UInt32

    port
    参数,在您的例子中是
    connectionPort
    变量,它不是有效的
    UInt32
    。它必须是介于
    1
    65535
    之间的有效端口号(MySQL的默认端口号为
    3306



    另一方面,Pomelo
    3.1.0
    没有正式发布MySQL
    5.1.73
    ,因此将来可能会遇到不兼容问题。

    似乎是在连接打开时发生的。请查查
            <logevent time="2020-01-15 16:24:17.2857" level="ERROR">
              <message>Input string was not in a correct format.</message>
              <type>System.FormatException</type>
              <trace>   at System.Number.StringToNumber(ReadOnlySpan`1 str, NumberStyles options, NumberBuffer&amp; number, NumberFormatInfo info, Boolean parseDecimal)
               at System.Number.ParseUInt32(ReadOnlySpan`1 value, NumberStyles options, NumberFormatInfo numfmt)
               at System.String.System.IConvertible.ToUInt32(IFormatProvider provider)
               at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
               at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.ChangeType(Object objectValue) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 703
               at MySql.Data.MySqlClient.MySqlConnectionStringValueOption`1.GetValue(MySqlConnectionStringBuilder builder) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnectionStringBuilder.cs:line 674
               at MySqlConnector.Core.ConnectionSettings..ctor(MySqlConnectionStringBuilder csb) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionSettings.cs:line 39
               at MySqlConnector.Core.ConnectionPool.GetPool(String connectionString) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ConnectionPool.cs:line 405
               at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 292
               at MySql.Data.MySqlClient.MySqlConnection.Open() in C:\projects\mysqlconnector\src\MySqlConnector\MySql.Data.MySqlClient\MySqlConnection.cs:line 280
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
               at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel)
               at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction()
               at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
               at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(DbContext _, Boolean acceptAllChangesOnSuccess)
               at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
               at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
               at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
               at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
               at ReportingServer.DB.CreateSession(UsageTracking usageTracking) in C:\Users\User\source\repos\Reporting Server\MySQL.cs:line 20
               at ReportingServer.APIs.GetSessionID() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 66
               at ReportingServer.APIs.Process() in C:\Users\User\source\repos\Reporting Server\APIs.cs:line 41
               at ReportingServer.HTTPServer.&lt;Listen&gt;b__10_0(Object HTTPRequest) in C:\Users\User\source\repos\Reporting Server\HTTPServer.cs:line 135</trace>
              <source>System.Private.CoreLib</source>
              <location>
              <ReportedIn>ReportingServer.Log</ReportedIn>
              <OnLine>17</OnLine>
            </location>
            </logevent>