C# sql语句c有问题#
我使用的是db4free.net,服务器运行缓慢,有时会超时,而不是连接。我只需要知道如何禁用或避免错误消息。如果有人知道一个更好的免费托管网站,将不胜感激C# sql语句c有问题#,c#,mysql,sql,C#,Mysql,Sql,我使用的是db4free.net,服务器运行缓慢,有时会超时,而不是连接。我只需要知道如何禁用或避免错误消息。如果有人知道一个更好的免费托管网站,将不胜感激 MySqlCommand cmd = new MySqlCommand(); MySqlDataReader dr; cmd.Connection = con; cmd.CommandText = "SELECT * FROM Users WHERE USERNAME = '" + "username" + "'AND
MySqlCommand cmd = new MySqlCommand();
MySqlDataReader dr;
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Users WHERE USERNAME = '" +
"username" + "'AND PASSWORD = '" + "password" + "'";
dr = cmd.ExecuteReader();
dr.Read();
if (dr.HasRows)
{
}
else
{
}
当服务器超时时,错误来自dr=cmd.ExecuteReader() 使用
cmd.CommandTimeout = int.MaxValue;
使用
增加命令执行的超时时间。用于更改默认超时 默认情况下,超时时间为30秒,这在大多数情况下都适用。您可以将其设置为“0”-无超时。但是,我建议为您的环境选择一些最佳值
cmd.CommandTimeout = 300; // Value in seconds
增加命令执行的超时时间。用于更改默认超时 默认情况下,超时时间为30秒,这在大多数情况下都适用。您可以将其设置为“0”-无超时。但是,我建议为您的环境选择一些最佳值
cmd.CommandTimeout = 300; // Value in seconds
老实说,基于你的代码,你有比服务器速度更多的问题 解决问题的最简单方法是将SqlCommand.CommandTimeout属性设置为大于默认值30秒的值。0将意味着一个无限期……像120秒这样的时间将远远超过任何用户所能忍受的时间 然后查看命令文本中的连接…只是请求sql注入攻击 然后,您将看到您正在传递密码的事实。充其量这意味着密码是固定的,最坏的情况是它们是纯文本 您应该使用参数化查询,仅基于用户名查询用户记录。应在数据库中为该字段编制索引,以提高查询性能。作为注册的一部分,您应该为每个用户生成一个用于散列密码的salt
检索salt后,您应该对用户提供的密码进行哈希运算并进行比较。老实说,根据您的代码,您遇到的问题比服务器速度多得多 解决问题的最简单方法是将SqlCommand.CommandTimeout属性设置为大于默认值30秒的值。0将意味着一个无限期……像120秒这样的时间将远远超过任何用户所能忍受的时间 然后查看命令文本中的连接…只是请求sql注入攻击 然后,您将看到您正在传递密码的事实。充其量这意味着密码是固定的,最坏的情况是它们是纯文本 您应该使用参数化查询,仅基于用户名查询用户记录。应在数据库中为该字段编制索引,以提高查询性能。作为注册的一部分,您应该为每个用户生成一个用于散列密码的salt
检索salt后,您应该对用户提供的密码进行散列并进行比较。1-您应该使用参数化查询来避免SQL注入 2-您可以使用try-catch块来处理超时 3-您应该将该命令放在“using”语句中,因为MySqlCommand实现IDisposable
string sql = "SELECT * FROM Users WHERE USERNAME = @username AND PASSWORD = @password";
using (MySqlCommand cmd = new MySqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@password", "password");
cmd.Parameters.AddWithValue("@username", "username");
try
{
MySqlDataReader dr = cmd.ExecuteReader();
}
catch (TimeoutException e)
{
Console.WriteLine(e);
// or whatever you want to do with a timeout
// perhaps retry again or give a message to the user
}
}
1-应该使用参数化查询来避免SQL注入 2-您可以使用try-catch块来处理超时 3-您应该将该命令放在“using”语句中,因为MySqlCommand实现IDisposable
string sql = "SELECT * FROM Users WHERE USERNAME = @username AND PASSWORD = @password";
using (MySqlCommand cmd = new MySqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@password", "password");
cmd.Parameters.AddWithValue("@username", "username");
try
{
MySqlDataReader dr = cmd.ExecuteReader();
}
catch (TimeoutException e)
{
Console.WriteLine(e);
// or whatever you want to do with a timeout
// perhaps retry again or give a message to the user
}
}
您可以使用commandTimeOut属性来控制命令使用的超时。为了加快速度,您可以向表中添加索引,选择特定字段而不是使用*并且我将使用参数来避免sql注入。后者是为了安全,不一定是为了速度。请考虑使用<代码>参数化查询< /代码>和<代码>使用< /代码>语句。您也可以使用
try-catch
块进行异常处理。好的,谢谢,没有更好的网站可以用来托管吗?添加帐户需要很长时间。您可以使用CommandTimeOut属性控制命令使用的超时。要加快速度,您可以向表中添加索引,选择特定字段而不是使用*并且我将使用参数来避免sql注入。后者是为了安全,不一定是为了速度。请考虑使用<代码>参数化查询< /代码>和<代码>使用< /代码>语句。您也可以使用try-catch
块进行异常处理。好的,谢谢,没有更好的网站可以用来托管吗?添加帐户会花费很长时间。此方法只会隐藏潜在问题。使用try-catch块将更好地解决此问题。您不想成为等待超时的用户之一此方法只会隐藏潜在问题。使用try-catch块可以更好地解决这个问题。我不想成为你的用户之一,等待超时命令超时是秒命令超时是秒你的权利,他们是纯文本,但这是一项正在进行的工作最终我将以我的方式加密这是最好的方式永远不实现它properly@Ragekillen我在您尝试之前要知道这看起来很难,但它就像对用户传递的值进行散列一样简单,并存储散列值以实现一些基本的安全性,以防您的数据库受到破坏(如果您不参数化输入,这绝对会发生)。当你只是想学习一些基本的知识时,我并不是想对你的安全问题唠叨不休,但这并不太复杂,养成这样的习惯是个好主意。虽然为用户名字段编制索引可能有助于数据库超时,但它实际上可能通过定时侧通道攻击导致用户枚举。不过,你至少应该专注于每个用户的salt和哈希密码。另外,我听说,如果你想让一个库处理繁重的数据,它们是纯文本的,但这是一项正在进行的工作,最终我会以我的方式工作到e