【发布时间】: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 * 不起作用,但更改它以获得特定列更正了问题。