C# mysql读取int32奇怪的行为

标签 c# mysql

我有一个 mysql 表,例如

   CREATE TABLE `bs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ma_nguoitao` varchar(32) COLLATE utf8_bin DEFAULT NULL,
  `ma_nguoitao_dv` varchar(32) COLLATE utf8_bin DEFAULT NULL,
  `ma_nguoi_bilap` varchar(32) COLLATE utf8_bin DEFAULT NULL,
  `ma_nguoi_bilap_dv` varchar(32) COLLATE utf8_bin DEFAULT NULL,
  `ma_loi` int(11) DEFAULT NULL,
  `noi_dung` blob,
  `phan_hoi` blob,
  `ngay_lap` datetime DEFAULT NULL,
  `ket_luan` varchar(512) COLLATE utf8_bin DEFAULT NULL,
  `tinh_trang` mediumint(9) DEFAULT NULL,
  `ma_bill` varchar(16) COLLATE utf8_bin NOT NULL,
  `phat_chatluong` int(11) NOT NULL,
  `phat_denbu` int(11) NOT NULL,
  `PRIMARY KEY (`id`)
  `) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

我使用保存数据

             dbManager.com.CommandText = "INSERT INTO bs(`id`,`ma_nguoitao`,`ma_nguoitao_dv`,`ma_nguoi_bilap`,`ma_nguoi_bilap_dv`,`ma_loi`,`noi_dung`,`phan_hoi`,`ngay_lap`,`ket_luan`,`tinh_trang`,`ma_bill`,`phat_chatluong`,`phat_denbu`) "+
                "VALUES(?id, ?nt, ?ntdv, ?nbl, ?nbldv, ?ml, ?nd, ?ph, ?nl, ?kl, ?tt, ?mb, ?pcl, ?pdb )"+
                "ON DUPLICATE KEY UPDATE ma_loi=VALUES(`ma_loi`), noi_dung=VALUES(`noi_dung`), phan_hoi=VALUES(`phan_hoi`), ket_luan=VALUES(`ket_luan`), tinh_trang=VALUES(`tinh_trang`), phat_chatluong=VALUES(`phat_chatluong`), phat_denbu=VALUES(`phat_denbu`)";
                dbManager.com.Prepare();
                MySqlCommand temp = dbManager.con.CreateCommand();
                MySqlDataReader reader;
                temp.CommandText = "SELECT LAST_INSERT_ID();";
                temp.Prepare();

                foreach (BASE_BIENBAN_LOI_ENTITY obj in list)
                {
                    if (obj.ma_bill.Trim().Length > 0)
                    {
                        dbManager.com.Parameters.Add("?id", obj.id);
                        dbManager.com.Parameters.Add("?nt",obj.ma_nguoitao); 
                        dbManager.com.Parameters.Add("?ntdv", obj.ma_nguoitao_donvi);
                        dbManager.com.Parameters.Add("?nbl",obj.ma_nguoi_bi_lap);
                        dbManager.com.Parameters.Add("?nbldv", obj.ma_nguoi_bi_lap_donvi);
                        dbManager.com.Parameters.Add("?ml", obj.ma_loi);
                        dbManager.com.Parameters.Add("?nd", obj.noi_dung);
                        dbManager.com.Parameters.Add("?nl", System.DateTime.Now);
                        dbManager.com.Parameters.Add("?ph", obj.phan_hoi);
                        dbManager.com.Parameters.Add("?kl", obj.ket_luan);
                        dbManager.com.Parameters.Add("?tt", obj.tinh_trang);
                        dbManager.com.Parameters.Add("?mb", obj.ma_bill);
                        dbManager.com.Parameters.Add("?pcl", obj.phat_chatluong);
                        dbManager.com.Parameters.Add("?pdb", obj.phat_denbu);
                        dbManager.com.ExecuteNonQuery();
                        reader = temp.ExecuteReader();
                        if (reader.Read())
                        {
                            obj.id = (int)(reader.GetInt32(0));
                        }
                        reader.Close();
                    }
                }

obj.phat_chatluong 定义为 int。我的问题是,当我从 phat_chatluong 字段读取值时,该值似乎解释为 ascii 字节数组而不是 int。例如,一条记录有 phat_chatluong=40,当我使用

读取它时
var cmd = new MySqlCommand("SELECT ma_bill ,id, ma_nguoitao, ma_nguoitao_dv,"+
                    "ma_nguoi_bilap, ma_nguoi_bilap_dv, ma_loi, noi_dung,"+
                    "phan_hoi, ngay_lap, ket_luan, tinh_trang, phat_chatluong, phat_denbu FROM bs_bienban", con);
            var reader = cmd.ExecuteReader();
            reader.Read();
            int phat_chatluong = (int) reader["phat_chatluong"];

然后我得到 0x3430 作为 phat_chatluong 的值,这太奇怪了?我哪里错了?

最佳答案

问题解决了!我从事的项目似乎使用了旧的 MySql Connector/Driver,现在在新版本的 MySql Connector 上就可以了。

关于C# mysql读取int32奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777713/

相关文章:

c# - 获取泛型 List<T> 对象的 T 类型

c# - 正则表达式:反转匹配顺序

mysql - 使用子查询与 LEFT JOIN 一起选择 MAX 值

MYSQL - 连接查询有点麻烦/困惑

mysql - 在合并选择查询中使用 order by

sql - 具有数千个插入的 MySQL 事务 - 它需要多少个 "round trips"?

c# - 在 C# 或 Java 中使用的 C++ DLL

c# - 在 ASP.NET MVC 中动态生成许多路由...这是一个完全糟糕的主意吗?

c# - .NET,JSON,嵌入式,免费的商业用途数据管理解决方案?该怎么办?

SQL:当 UNIQUE 键约束不适用时处理表中的唯一值