SQLException: 字符串 ''' 后的未闭合引号

Posted

技术标签:

【中文标题】SQLException: 字符串 \'\'\' 后的未闭合引号【英文标题】:SQLException: Unclosed quotation mark after the character string '''SQLException: 字符串 ''' 后的未闭合引号 【发布时间】:2014-12-22 01:53:08 【问题描述】:

我的登录系统有问题。

当我添加撇号字符 (') 时出现错误:

Microsoft.Practices.EnterpriseLibrary.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

附加信息:字符串'''后面的非闭合引号。 ''' 附近的语法不正确。

这是登录代码。这是单独获取用户名和密码,但它有效。

public String getSenha(string user)
    
        String Query = "SELECT senha FROM dbo.Login WHERE usuario = '" + user + "'"; //Comando

        Conexao Connection = new Conexao(); //Instancia a classe conexao
        object ret = Connection.QueryScalar(Query); //Executa o comando e salva o resultado em 'ret'

        if (ret.GetType() == typeof(int))
            return null;
        else
            return (string)ret;
    

public Boolean checkUser(string user)
    
        String Query = "SELECT COUNT(usuario) FROM dbo.Login WHERE usuario = '" + user + "'";
        Conexao Connection = new Conexao();

        if ((int)Connection.QueryScalar(Query) > 0) // renorno de 0 significa que nao existe esse usuario.
            return true;
        else
            return false;
    

public Object QueryScalar(string Command)
    
        // Error is thrown here
        return DatabaseFactory.CreateDatabase("Windows.Properties.Settings.dboSoftwareGSCConnectionString").ExecuteScalar(CommandType.Text, Command);
    

【问题讨论】:

显示你的命令字符串,这就是问题所在。 我必须学习如何最好地提出问题 kkkk 。我希望你有所进步。 【参考方案1】:

这是经典的 SQL 注入。在 SQL 中,语句用单引号括起来......所以你的单引号过早地结束了你的语句,因为你没有转义它。这也使您容易受到恶意用户的攻击。您必须使用参数化 SQL 来避免它。见:http://www.dotnetperls.com/sqlparameter

【讨论】:

以上是关于SQLException: 字符串 ''' 后的未闭合引号的主要内容,如果未能解决你的问题,请参考以下文章

SQL 的未分类 SQLException

Spring PreparedStatementCallback; SQL 无效列类型 Oracle 的未分类 SQLException

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

SQL 异常未处理 - System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

字符串'BDR_POST-BI(SCT')后的未闭合引号

标头包含标准 C++ 库后的未定义符号