Gab*_*one 0 c# sql sqlexception
我的登录系统有问题.
当我添加撇号字符('
)时,我收到错误:
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);
}
Run Code Online (Sandbox Code Playgroud)
这是经典的SQL注入.在SQL中,语句包含在单引号中......所以你的单引号会过早地结束你的语句,因为你没有逃避它.这也使您容易受到恶意用户的攻击.您必须使用参数化SQL来避免它.请参阅:http://www.dotnetperls.com/sqlparameter