Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查随机数是否重复_C#_Sql_Sql Server - Fatal编程技术网

C# 检查随机数是否重复

C# 检查随机数是否重复,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();

我正在生成一个随机数入场号,这是我的DAL

 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抱歉…试图从内存中执行此操作。修正了样本。