【问题标题】:'Unable to convert MySQL date/time value to System.DateTime' WHEN not using a date - C#.Net'无法将 MySQL 日期/时间值转换为 System.DateTime' 不使用日期 - C#.Net
【发布时间】:2019-02-20 18:08:37
【问题描述】:

我有这个问题:

SELECT * FROM records WHERE serial LIKE '%19-111117-11%';

序列列是一个 varchar 字段。这里没有日期/时间。也许 .Net 或 MySQL 认为 '19-111117-11' 是一个日期?

我收到此错误:

MySql.Data.Types.MySqlConversionException: '无法将 MySQL 日期/时间值转换为 System.DateTime'

奇怪的是,这个查询在 MySql 查询浏览器中运行良好,但在我的 C# 应用程序中运行时抛出该异常。

我试过了:

SELECT * FROM records WHERE CAST(serial as char) LIKE '%19-111117-11%';

为了它,我把“19-111117-11”分成两部分,如下所示:

(有点伪代码,因为我后来尝试了更多的东西)

string p1 = serial.substring(0, serial.length/2)
string p2 = serial.substring(serial.length)

string query = "SELECT * FROM records WHERE SUBSTRING(serial,0,LENGTH(serial)/2) = " + p1 + "' AND  SUBSTRING(serial,LENGTH(serial)/2,LENGTH(serial)/2) = '" + p2 + "';";

请帮忙!这么烦人的问题。我不确定为什么会转换为日期/时间异常。我根本没有使用日期...

编辑:

SELECT * FROM records WHERE `serial` LIKE '%19-111117-11%';

同样,不起作用。我不认为它与 C# 代码有关,因为它只是一个查询,它是一个 MySQL 异常,但这里是使用的代码:

string serial = "19-111117-11";
DataTable tracking_info = MySqlGetDataTable("SELECT * FROM records WHERE `serial` LIKE '%" + serial + "%';");

调用的是这个函数:

public static DataTable MySqlGetDataTable(string query, string connString = "default")
{       
    var data = new DataTable();
    using (var conn = new MySqlConnection(connString == "default" ? Program.CidDataConnectionString : connString))
    {
        var adapter = new MySqlDataAdapter(query, conn);
        adapter.Fill(data);
    }

    return data;
}

编辑 2:

使用以下序列号:19-111115-11、19-111116-11、19-111118-11 都可以工作...只是 19-111117-11 不工作。它似乎与:

19-111117-11

【问题讨论】:

  • 听起来问题出在你的 C# 代码中,把它贴出来,我们可以看看
  • serial 似乎是MySql中的一个关键字。尝试用反引号包围该标识符`serial`
  • 感谢您的回答。我编辑了帖子。还是不行
  • 对不起,@HereticMonkey。你是对的。我不明白为什么 select * 不起作用,但更改它以获得特定列更正了问题。

标签: c# mysql


【解决方案1】:

在应用配置文件中设置 'Zero Datetime=True'

<add name="CONNECTIONSTRINGNAME" connectionString="server's HOSTNAMEorIP(i.e Localhost or IP address);user id=USER_ID;Pwd=PASSWORD;persistsecurityinfo=True;database=DATABASENAME;Convert Zero Datetime=True" providerName="MySql.Data.MySqlClient"/>

【讨论】:

    【解决方案2】:
    SELECT * FROM records WHERE `serial` LIKE '%19-111117-11%';
    

    不起作用,但是:

    SELECT col1, col2, col3... FROM records WHERE `serial` LIKE '%19-111117-11%';
    

    工作。

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 2011-06-05
      • 2013-01-21
      • 2013-06-04
      • 2013-05-17
      • 2015-03-23
      • 2012-05-28
      相关资源
      最近更新 更多