当前位置:编程学习 > C#/ASP.NET >>

大家好。为什么这样写的sql语句不行呢?我是用asp.net连接mysql的,mysql在空间服务器上的。

string sql = string.Format("select count(1) from userInfo where name='{0}'", userName);
为什么name='{0}'不能加引用?只能这样写name={0},这样写不报错,但得到的结果就不正确了,一加单引号就报错了。

报这样的错!!!

--------------------编程问答-------------------- string sql = string.Format("select count(1) from userInfo where name={0}", "'"+userName+"'"); --------------------编程问答--------------------
引用 1 楼 still_melody 的回复:
string sql = string.Format("select count(1) from userInfo where name={0}", "'"+userName+"'");


谢谢你,但是这样写,还是报和上面一样的错。

--------------------编程问答-------------------- --------------------编程问答-------------------- 这个userName里面是什么内容 --------------------编程问答-------------------- js代码里传过来的。



--------------------编程问答--------------------
引用 4 楼 still_melody 的回复:
这个userName里面是什么内容


--------------------编程问答-------------------- 改成固定的值先试一下,比如"张三"。查出结果在替换,注意转义 --------------------编程问答-------------------- 加个断点,取出已替换好的sql语句,放数据库上运行此sql语句 --------------------编程问答-------------------- name='{0}'改为name={0} --------------------编程问答-------------------- 1、先如7楼所说,测试一下固定值,如果这样没错,说明有可能之前你传进来的值有问题,没转义或者存在单引号之类的问题。
2、如8楼所说,打好断点,找到传入得sql语句,这个语句看一下应该就会知道问题出在哪了。
3、为什么不干脆试试:
string sql = "select count(1) from userInfo where name='" + userName.Replace("'","''") + "'";
4、我觉得吧,你的userName里面肯定有单引号,而且可能有两个,才出现了这个问题...注意看传进去了什么值 --------------------编程问答-------------------- string sql = string.Format("select count(1) from userInfo where name='{0}'", userName);

            SqlParameter sp = new SqlParameter("?NickName", SqlDbType.VarChar, 50);
            sp.Value = strNickName;
            return SqlHelper.ExecuteDataRow(transaction, CommandType.Text, "SELECT  * "
                + "FROM  A WHERE Name=?NickName;", sp);
这样写就行了,你那么写可以被SQL注入 --------------------编程问答-------------------- 为什么要拼接sql语句呢?这样效率不高,也容易被注入,sqlserver使用@,mysql使用?,oracle使用: 使用参数替换,安全呐。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,