C#插入MySql数据加转义字符的问题“”

.Net技术 码拜 9年前 (2015-05-10) 1630次浏览 0个评论

鄙人用C#写了一个插入MySql的系统服务,在插入数据时莫名其妙的在SQL语句中加入了转义字符“\”,这是什么问题?亲赐教。
代码:

// 实例化数据库连接字符串对象
                wMySqlConnStr = new MySQLConnectionString(ConfigurationManager.AppSettings[“DBServer”],
                                                          ConfigurationManager.AppSettings[“DBDataBase”],
                                                          ConfigurationManager.AppSettings[“UserID”],
                                                          ConfigurationManager.AppSettings[“PassWord”]);

                // 实例化数据库连接对象
                wMySqlConn = new MySQLConnection(wMySqlConnStr.AsString);

                // 打开数据库连接
                wMySqlConn.Open();

                // 建立事物
                mMySQLTrans = (MySQLTransaction)wMySqlConn.BeginTransaction();

                // MySql字符编码设定
                wMySqlCom = new MySQLCommand(“set names gbk”, wMySqlConn);
                wMySqlCom.Transaction = mMySQLTrans;
                wMySqlCom.ExecuteNonQuery();

                // 插入项目信息语句设定
                wStrInsertProjectInfo = “INSERT INTO PROJECT_LIST SET ” +
                                            “PROJECT_ID = ?PROJECT_ID” +
                                            “, COMMENT = ?COMMENT”;

                wMySqlCmd.Parameters.Add(“?PROJECT_ID”, DbType.String);
                wMySqlCmd.Parameters.Add(“?COMMENT”, DbType.String);

                wMySqlCmd.Parameters[“?PROJECT_ID”].Value = dsCRMData.Tables[0].Rows[wCRMRowIndex][“PROJECTID”].ToString().Replace(@””, @”\”);                  /*值:GZG140082*/
                wMySqlCmd.Parameters[“?COMMENT”].Value = dsCRMData.Tables[0].Rows[wCRMRowIndex][“BEIZHU”].ToString().Replace(@””, @”\”);                  /*值:-(全角)*/

                    wMySqlCmd.Transaction = mMySQLTrans;

                    // 插入 LIST 表
                    wMySqlCmd.ExecuteNonQuery();

生成的SQL语句:INSERT INTO YUSUAN_PROJECT_LIST SET PROJECT_ID = “”GZG140082″”, COMMENT = “”‐\””

40分
wMySqlCom = new MySQLCommand(“set names gbk“, wMySqlConn);
既然你使用的是 GBK 字符集,那么就应该知道以下字符
乗 俓 僜 刓 匼 哱 嘰 圽 塡 奬 媆 孿 峔 嶾 廫 怽 慭 抃 揬 擻 昞 朶 梊 榎 橽 歕 沑 淺 漒 瀄 焅 燶 猏 玕 琝 璡 甛 痋 癨 盶 瞈 砛 碶 礬 禱 穃 竆 筡 篭 籠 糪 絓 綷 縗 繺 羂 耚 肻 腬 臷 芢 荺 萛 蒤 蔦 薥 蘚 蚛 蝄 蟎 衆 裓 襖 覾 診 誠 謀 譢 豛 賊 赲 踈 躙 輁 轡 運 郳 醆 鈂 鉢 鋅 錦 鎈 鏫 鑌 閈 闬 隲 靄 韁 頫 颸 餦 馶 騖 骪 鬨 鮘 鯸 鱘 鳿 鵟 鶿 鸤 黒 齖
内码的第二个字节为 0x5c 即 \ 
你有 .Replace(@””, @”\”) 的操作,很自然的就将本属于中文字符的 0x5c 也一并替换了

MySQL 只需转义单引号,只需 Replace(@”‘”, @”\’”) 即将 “” 替换成 \”” 即可

我将语句改为:
    wMySqlCmd.Parameters[“?PROJECT_ID”].Value = dsCRMData.Tables[0].Rows[wCRMRowIndex][“PROJECTID”].ToString().Replace(“”””, “\”””);
    wMySqlCmd.Parameters[“?COMMENT”].Value = dsCRMData.Tables[0].Rows[wCRMRowIndex][“BEIZHU”].ToString().Replace(“”””,”\”””);

可最后他还是加上了 “\” 
生成的SQL语句:INSERT INTO YUSUAN_PROJECT_LIST SET PROJECT_ID = “”GZG140082″”, COMMENT = “”‐\”” 

问题解决,谢谢版主的提醒。
我将全角的“-”替换为半角“-”,插入数据成功。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#插入MySql数据加转义字符的问题“”
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!