C# 检查随机数是否重复
我正在生成一个随机数入场号,这是我的DALC# 检查随机数是否重复,c#,sql,sql-server,C#,Sql,Sql Server,我正在生成一个随机数入场号,这是我的DAL public static int randomgen() { int id=0; int number = r.Next(100); HttpContext.Current.Session["number"] = "SN" + (" ") + number.ToString(); SqlConnection con = DBConnection.OpenConnection();
public static int randomgen()
{
int id=0;
int number = r.Next(100);
HttpContext.Current.Session["number"] = "SN" + (" ") + number.ToString();
SqlConnection con = DBConnection.OpenConnection();
try
{
string sql1 = "select admissionno from tblstudent_details";
SqlCommand cmd=new SqlCommand(sql1,con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
id = Convert.ToInt32(dr[0]);
}
dr.Close();
return id;
}
catch (Exception)
{
throw;
}
}
我正在检查是否生成了任何副本,但我得到了一个错误,比如输入字符串的格式不正确?我哪里做错了?还有比这更好的方法吗?您问是否有更好的方法 根据我对这个问题的理解,您试图做的是选择一个随机值,然后检查数据库,看看该值是否已经存在。您希望将值返回到UI,以告知UI该值是否存在
这里有两个可供选择的方案:
public static bool randomgen()
{
bool isFound = false;
string admissionNumber = "SN " + r.Next(100);
HttpContext.Current.Session["number"] = admissionNumber;
using (SqlConnection con = new SqlConnection()) // use "using" to guarantee connection is closed
{
string sql1 = "SELECT CASE WHEN EXISTS(SELECT admissionno FROM tlblstudent_details WHERE admissionno = @admissionno) THEN 1 ELSE 0 END";
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@admissionno", number);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
isFound = (Convert.ToInt32(dr[0]) == 1)
}
}
}
}
return isFound;
}
通过这种方式,您可以让SQL Server检查该值是否存在
另一种方法
不确定是否需要提示用户,如果该值不是唯一的,如果这不是要求,那么我会考虑另一种方法;继续尝试,直到你找到一个独特的价值…像这样
public static int randomgen()
{
bool isFound = true;
while (isFound)
{
string admissionNumber = "SN " + r.Next(100);
using (SqlConnection con = new SqlConnection()) // use "using" to guarantee connection is closed
{
string sql1 = "SELECT CASE WHEN EXISTS(SELECT admissionno FROM tlblstudent_details WHERE admissionno = @admissionno) THEN 1 ELSE 0 END";
using (SqlCommand cmd = con.CreateCommand(sql1))
{
cmd.Parameters.AddWithValue("@admissionno", admissionNumber);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
isFound = (Convert.ToInt32(dr[0]) == 1)
}
}
}
}
return number;
}
这会一直检查,直到返回唯一的值。然后将该唯一值返回给调用方法。现在,您可以从调用者设置HttpContent.Current会话,将此方法的责任仅留给查找唯一的许可号码。第二种方法的缺点是可能需要很长时间才能找到唯一的值,这取决于已经使用了多少个值,特别是考虑到您只允许100个值
希望这给你一个好的选择。如果您还有其他问题,请告诉我。您问是否有更好的方法 根据我对这个问题的理解,您试图做的是选择一个随机值,然后检查数据库,看看该值是否已经存在。您希望将值返回到UI,以告知UI该值是否存在
这里有两个可供选择的方案:
public static bool randomgen()
{
bool isFound = false;
string admissionNumber = "SN " + r.Next(100);
HttpContext.Current.Session["number"] = admissionNumber;
using (SqlConnection con = new SqlConnection()) // use "using" to guarantee connection is closed
{
string sql1 = "SELECT CASE WHEN EXISTS(SELECT admissionno FROM tlblstudent_details WHERE admissionno = @admissionno) THEN 1 ELSE 0 END";
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("@admissionno", number);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
isFound = (Convert.ToInt32(dr[0]) == 1)
}
}
}
}
return isFound;
}
通过这种方式,您可以让SQL Server检查该值是否存在
另一种方法
不确定是否需要提示用户,如果该值不是唯一的,如果这不是要求,那么我会考虑另一种方法;继续尝试,直到你找到一个独特的价值…像这样
public static int randomgen()
{
bool isFound = true;
while (isFound)
{
string admissionNumber = "SN " + r.Next(100);
using (SqlConnection con = new SqlConnection()) // use "using" to guarantee connection is closed
{
string sql1 = "SELECT CASE WHEN EXISTS(SELECT admissionno FROM tlblstudent_details WHERE admissionno = @admissionno) THEN 1 ELSE 0 END";
using (SqlCommand cmd = con.CreateCommand(sql1))
{
cmd.Parameters.AddWithValue("@admissionno", admissionNumber);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
isFound = (Convert.ToInt32(dr[0]) == 1)
}
}
}
}
return number;
}
这会一直检查,直到返回唯一的值。然后将该唯一值返回给调用方法。现在,您可以从调用者设置HttpContent.Current会话,将此方法的责任仅留给查找唯一的许可号码。第二种方法的缺点是可能需要很长时间才能找到唯一的值,这取决于已经使用了多少个值,特别是考虑到您只允许100个值
希望这给你一个好的选择。如果您还有其他问题,请告诉我。为什么要在
int
上调用Convert.ToInt32
?哎呀,我不想检查它现在是否会更新……您是说您正在检查是否生成了任何副本,但代码甚至没有尝试进行任何类似的检查。它只是创建一个随机数并存储在会话变量中,然后从数据库中获取另一个数字并返回它。你到底想做什么?我正在检查UI if exists中是否显示一条消息,如generate other number if not insert已完成。如果没有,我如何检查?在哪一行中得到错误,因为我在这一行HttpContext.Current.Session[“number”]=“SN”+(“”)number.ToString()中看到错误代码>应该是HttpContext.Current.Session[“number”]=“SN”+“”+number.ToString()代码>为什么在int
上调用Convert.ToInt32
?哎呀,我不想检查它现在是否会更新……你是说你正在检查是否生成了任何重复项,但代码甚至没有尝试这样做。它只是创建一个随机数并存储在会话变量中,然后从数据库中获取另一个数字并返回它。你到底想做什么?我正在检查UI if exists中是否显示一条消息,如generate other number if not insert已完成。如果没有,我如何检查?在哪一行中得到错误,因为我在这一行HttpContext.Current.Session[“number”]=“SN”+(“”)number.ToString()中看到错误代码>应该是HttpContext.Current.Session[“number”]=“SN”+“”+number.ToString()代码>我得到了一个类似这样的错误,方法“CreateCommand”在第一次使用(SqlCommand cmd=con.CreateCommand(sql1))时不重载使用“1”参数example@chandra抱歉…试图从内存中执行此操作。修复了该示例。我遇到了这样一个错误:方法“CreateCommand”在第一次使用(SqlCommand cmd=con.CreateCommand(sql1))时不重载使用“1”参数example@chandra抱歉…试图从内存中执行此操作。修正了样本。