winform 写mysql语句用mysqlcommand 输入变量如何保证变量中字符串不改变

weixin_54582889 2021-01-15 08:46:41
string ReceiveMessagecom1 = "INSERT INTO 历史记录 (时间,操作) VALUES('" + DateTime.Now.ToLocalTime().ToString() + "' ,' " + ReceiveMessage + " ' )";
比如这个如何让ReceiveMessage 这个变量中写的是一串代码,但是可以完全不改变的输入到数据库中储存起来
...全文
1517 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Stock king 2021-01-22
  • 打赏
  • 举报
回复
基本这个BUG还是会继续出现,如何想一次性处理,那就得从来
bluedoctor 2021-01-21
  • 打赏
  • 举报
回复
不要去替换字符串,用参数化查询。SOD框架全面支持参数化查询,比如下面的例子,SOD框架的微型ORM示例,它有一个查询条件,内部就是参数化查询处理过的:


//假设UserPoco 对象跟 Table_User 表是映射的相同结构
AdoHelper dbLocal = new SqlServer();
dbLocal.ConnectionString = "Data Source=.;Initial Catalog=LocalDB;Integrated Security=True";
var list=dbLoal.QueryList<UserPoco>("SELECT UID,Name FROM Table_User WHERE Sex={0} And Height>={1:5.2}",1, 1.60M);
王大师王文峰 2021-01-18
  • 打赏
  • 举报
回复
直接双引号字符串
hefei0603 2021-01-15
  • 打赏
  • 举报
回复
你说的是vs中变量查看器中”"“显示为了”/"“吧,这个是完全正常的。变量查看器只是显示了转义符,你直接把字符串打印出来就不会有”/“。
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
引用 8 楼 wtnu200 的回复:
特殊字符,需要转义,在vs里也一样,你觉得这个字符串 string a="2"-DO-35013-A2BZ-HT05-B" 对不对
应该就是这里和我的\" " + ReceiveMessage + " \"导致的问题,a的值为2"-DO-35013-A2BZ-HT05-B的话是对的,但是VS中要转译所以string a="2"-DO-35013-A2BZ-HT05-B"会被分开读变成了string a="2"后面的都算错误
wtnu200 2021-01-15
  • 打赏
  • 举报
回复
特殊字符,需要转义,在vs里也一样,你觉得这个字符串 string a="2"-DO-35013-A2BZ-HT05-B" 对不对
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
引用 4 楼 wtnu200 的回复:
不思考问题,就算你这次解决,下次遇到这问题还是一样不会
大佬知道怎么解决不
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
问题好像出在这个转译部分,别的代码里面变量中管线号不带双引号的都能通过,有双引号的就没有一个成功的,不知道怎么解决
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
引用 3 楼 wtnu200 的回复:
竟然还没有解决,感觉你没去想出这个问题原因,然后再解决对应问题,我直接写给你吧 string ReceiveMessage = "UPDATE `旅大16-3` SET 杆件组对完成标志= ''报检中'' WHERE 单管号 = ''DO-LDB01-35068-02'' AND 焊口号 = ''FW-10'' AND 管线号 =''-DO-35068-A2BZ-HT35''"; string ReceiveMessagecom1 = "INSERT INTO 历史记录 (时间,操作) VALUES('" + DateTime.Now.ToLocalTime().ToString() + "' ,' " + ReceiveMessage + " ' )"; 使用拼接sql字符串,就需要自己处理特殊字符,而你这里的特殊字符就是 ' 如果你不想处理特殊字符,就必须使用参数SqlParameter string ReceiveMessage = "UPDATE `旅大16-3` SET 杆件组对完成标志= '报检中' WHERE 单管号 = 'DO-LDB01-35068-02' AND 焊口号 = 'FW-10' AND 管线号 ='-DO-35068-A2BZ-HT35'"; string ReceiveMessagecom1 = "INSERT INTO 历史记录 (时间,操作) VALUES(@CTime ,@ReceiveMessage)"; List<SqlParameter> param = new List<SqlParameter>() { new SqlParameter("@CTime",DateTime.Now), new SqlParameter("@ReceiveMessage", ReceiveMessage); }; //或者 MySqlCommand cmd; cmd.Parameters.AddWithValue("@CTime", DateTime.Now);
数据库中的管线号是2"-DO-35013-A2BZ-HT05-B但是通过到变量中不知道怎么就变成了2\"-DO-35013-A2BZ-HT05-B多了一个\这个怎么解决啊
wtnu200 2021-01-15
  • 打赏
  • 举报
回复
不思考问题,就算你这次解决,下次遇到这问题还是一样不会
wtnu200 2021-01-15
  • 打赏
  • 举报
回复
竟然还没有解决,感觉你没去想出这个问题原因,然后再解决对应问题,我直接写给你吧 string ReceiveMessage = "UPDATE `旅大16-3` SET 杆件组对完成标志= ''报检中'' WHERE 单管号 = ''DO-LDB01-35068-02'' AND 焊口号 = ''FW-10'' AND 管线号 =''-DO-35068-A2BZ-HT35''"; string ReceiveMessagecom1 = "INSERT INTO 历史记录 (时间,操作) VALUES('" + DateTime.Now.ToLocalTime().ToString() + "' ,' " + ReceiveMessage + " ' )"; 使用拼接sql字符串,就需要自己处理特殊字符,而你这里的特殊字符就是 ' 如果你不想处理特殊字符,就必须使用参数SqlParameter string ReceiveMessage = "UPDATE `旅大16-3` SET 杆件组对完成标志= '报检中' WHERE 单管号 = 'DO-LDB01-35068-02' AND 焊口号 = 'FW-10' AND 管线号 ='-DO-35068-A2BZ-HT35'"; string ReceiveMessagecom1 = "INSERT INTO 历史记录 (时间,操作) VALUES(@CTime ,@ReceiveMessage)"; List<SqlParameter> param = new List<SqlParameter>() { new SqlParameter("@CTime",DateTime.Now), new SqlParameter("@ReceiveMessage", ReceiveMessage); }; //或者 MySqlCommand cmd; cmd.Parameters.AddWithValue("@CTime", DateTime.Now);
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
传入内容不确定你先拿这个试试
string ReceiveMessage  = UPDATE `旅大16-3` SET 杆件组对完成标志= '报检中'  WHERE 单管号 = 'DO-LDB01-35254-02' AND 管线号 ='2\"-DO-35254-A2BZ-HT05' AND 焊口号 = 'FW-5'
看看怎么能成功执行
  • 打赏
  • 举报
回复
使用mediumtext字段类型 然后就是传入时如果字符串含双引号,单引号,记得转义
hefei0603 2021-01-15
  • 打赏
  • 举报
回复
引用 11 楼 weixin_54582889 的回复:
引用 10 楼 hefei0603 的回复:
你说的是vs中变量查看器中”"“显示为了”/"“吧,这个是完全正常的。变量查看器只是显示了转义符,你直接把字符串打印出来就不会有”/“。
是的,但是我要把这句话插入到数据库中,字符串需要用引号引起来,这导致了字符串中的引号和外边的引号呼应起来了,导致了报错,如何避免这种情况
如果已经是字符串对象了,它自己就会有转义符,你拿这个字符串对象进行字符串凭借是不会报错的,但是你在代码中拼接的字符串代码带有双引号的就需要进转义。
weixin_54582889 2021-01-15
  • 打赏
  • 举报
回复
引用 10 楼 hefei0603 的回复:
你说的是vs中变量查看器中”"“显示为了”/"“吧,这个是完全正常的。变量查看器只是显示了转义符,你直接把字符串打印出来就不会有”/“。
是的,但是我要把这句话插入到数据库中,字符串需要用引号引起来,这导致了字符串中的引号和外边的引号呼应起来了,导致了报错,如何避免这种情况

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧