从 c# 查询 MySQL 返回 System.Byte[]

Posted

技术标签:

【中文标题】从 c# 查询 MySQL 返回 System.Byte[]【英文标题】:Query to MySQL from c# returns System.Byte[] 【发布时间】:2011-02-17 12:12:09 【问题描述】:

我正在使用下面的 SP 来返回 Generated Insert 语句的值,并且在 Query 浏览器中执行时它工作正常。

当我尝试从 C# 获取值时,它给了我“System.Byte[]”作为返回值。 当我尝试从 mysql 查询浏览器中获取值时,它给了我返回值:

'插入到 admindb.accounts values("54321","2","karthik2","karthik2","1");'

我猜问题出在返回值的单引号上。是这样吗 ?

    DELIMITER $$

DROP PROCEDURE IF EXISTS `admindb`.`InsGen` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsGen`(
in_db varchar(20),
in_table varchar(20),
in_ColumnName varchar(20),
in_ColumnValue varchar(20)
)
BEGIN

declare Whrs varchar(500);
declare Sels varchar(500);
declare Inserts varchar(2000);
declare tablename varchar(20);
declare ColName varchar(20);


set tablename=in_table;


# Comma separated column names - used for Select
select group_concat(concat('concat(\'"\',','ifnull(',column_name,','''')',',\'"\')'))
INTO @Sels from information_schema.columns where table_schema=in_db and table_name=tablename;


# Comma separated column names - used for Group By
select group_concat('`',column_name,'`')
INTO @Whrs from information_schema.columns where table_schema=in_db and table_name=tablename;


#Main Select Statement for fetching comma separated table values

 set @Inserts=concat("select concat('insert into ", in_db,".",tablename," values(',concat_ws(',',",@Sels,"),');')
 as MyColumn from ", in_db,".",tablename, " where ", in_ColumnName, " = " , in_ColumnValue, " group by ",@Whrs, ";");

 PREPARE Inserts FROM @Inserts;

 EXECUTE Inserts;

END $$

DELIMITER ;

【问题讨论】:

在连接设置中添加这个技巧:尊重二进制标志=假; 【参考方案1】:

在连接设置中添加它就可以了:尊重二进制标志=false;

【讨论】:

我在检索数据集行值时遇到了类似的问题。受影响的字段是 DateTime 字段,并且只会返回 System.Byte[] 而不是字段值。添加您提到的字符串解决了问题。 @Anuya 为此 +1,它就像一个魅力!我也有同样的问题,即 DateTime 字段将返回 System.Byte[] 而不是实际的日期值。这个标志有什么作用?

以上是关于从 c# 查询 MySQL 返回 System.Byte[]的主要内容,如果未能解决你的问题,请参考以下文章

C# 连接MYSQL 返回查询结果时某些字段显示System.Byte[]的问题

从 C# 中的插入查询返回 ID

从数据库获取值后,C# 中的查询返回 false

从查询 C#、EF Core 返回一个值

c# 查询sql 返回多个參数

将mysql查询中项目的嵌套列表属性映射到c#对象