sql语句添加的时候,是拼串,当遇到特殊符号,当成命令执行报错。
insertintotalbevalue('"+topic+"');拼串,到topic为use或者是'单引号就会报错。一般用@topic参数来代替,但是写了cmd.Par...
insert into talbe value (' "+topic+" ');拼串,到topic为use或者是 '单引号就会报错。
一般用@topic参数来代替,但是写了
cmd.Parameters.Add("@topic", OleDbType.VarChar).Value = topic;
也会报错,说@topic没声明。求解决 展开
一般用@topic参数来代替,但是写了
cmd.Parameters.Add("@topic", OleDbType.VarChar).Value = topic;
也会报错,说@topic没声明。求解决 展开
3个回答
展开全部
你sql语句里就需要写成参数的形式
把insert into talbe value (' "+topic+" ')里的' "+topic+" '直接写成@topic
另外sql语句里的参数名字,和你c#里的ADD的参数名字一定要一样
其实你仔细点就应该发现了,为什么Parameters.Add方法需要你定义该参数类型而sql语句里有需要直接写上参数名字,本质上作用就相当于你在sql语句里自己写declare定义变量一样,只不过编译器帮你做掉了
把insert into talbe value (' "+topic+" ')里的' "+topic+" '直接写成@topic
另外sql语句里的参数名字,和你c#里的ADD的参数名字一定要一样
其实你仔细点就应该发现了,为什么Parameters.Add方法需要你定义该参数类型而sql语句里有需要直接写上参数名字,本质上作用就相当于你在sql语句里自己写declare定义变量一样,只不过编译器帮你做掉了
更多追问追答
追问
晕,我上面说了,@topic参数不能用,会报错的
追答
亲,耐心一点,仔细看,你是没想明白
首先如果你要用Parameters.Add,那么你的sql语句里就不应该用拼接串了,而是直接写成你的参数@topic,类似这样insert into talbe value (@topic)
另外c#代码这句cmd.Parameters.Add("@topic", OleDbType.VarChar).Value = topic;
改成cmd.Parameters.Add(new SqlParameter("@topic", SqlDbType.VarChar) { Value =topic
});
也可以先add,再addwithvalue
最后才是你的excute
展开全部
那要看topic这个变量的内容了,如果这个变量本身带有单引号,那么是违法的,或者如果想录入数据库需要进行转义,如果你用参数化插入,那么values里面只需要用占位符,不需要加单引号
更多追问追答
追问
内容是随便写了,因为他是编译器,里面写,可以去复制别人的文章,一个文章什么都有的。
追答
如果报单引号不完整错误,肯定是变量里面含有字符串单引号,这个用参数化应该可以避免的
insert into table(topic) values(@topci)
cmd.Parameters.Add("@topic", OleDbType.VarChar).Value = topic;
这样还是会报错吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题最简单有效的解决方法是替换topic中的英文单引号为中文单引号
追问
中文的单引号是两个方向的,'' ‘’对比一下,怎么替换啊。
追答
必须那么严格么?不要求那么严格就直接用’替换
如果非要那么严格,那你在程序的替换里按照单引号出现的次数来替换吧
出现为奇数时用‘替换,偶数时用’替换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询