在数据库

时间:2017-12-01 07:22:12

标签: c# sql-server random

我一直在我的程序中创建ID,但是有一个需要生成随机数,但如果它已经存在于我的数据库中,那么它必须执行另一个随机数以防止重复。我的问题是如何再次生成另一个随机数?

这是我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
       random rand = new random();
        aidentification.Text = rand.Next(1, 5).ToString();   
        string exist = string.Empty;
        exist =  "Select * from fruit_stock " +
                  "where identification=@id";



        SqlConnection conn = new SqlConnection("server=WIN10;database=fruit_storage;user=fruit_admin;password=admin;");

       SqlCommand cmd = new SqlCommand()
    {
        Connection = conn,
        CommandType = CommandType.Text,
        CommandText = exist

    };
cmd.Parameters.AddWithValue("@id", aidentification.Text);
        try
        {
         conn.Open();
         SqlDataReader reader;
         reader = cmd.ExecuteReader();
            if (reader.HasRows){
               // PUT THE CODE HERE TO PERFORM ANOTHER RANDOM NUMBERS
            }
         conn.Close();
        }
      catch (Exception ex) {
          MessageBox.Show(ex.Message);
      }

    }      
}

}

3 个答案:

答案 0 :(得分:1)

这个答案是关于没有你的问题 - 没有在代码中解决它(通过更好的设计修复)

CREATE TABLE fruitInStock
(
 id int IDENTITY(1,1),
 fruitname varchar (20), -- this should be a FK into a fruits table 
 amountOf int NOT NULL
  -- more fields
);    

INSERT fruitInStock
   (fruitname , amountOf )
VALUES
   ('Apple', 20),
   ('Pear', 10),
   ('Kiwi', 2000)    
;

SELECT * from fruitInStock

给出

id  fruitname   amountOf
1   Apple   20
2   Pear    10
3   Kiwi    2000

ID在插入时自动生成,不会重复 - 数据库负责自己的完整性,而代码不需要。只需插入无ID。

答案 1 :(得分:1)

你试试这个

DECLARE @ID INT ,@New_ID INT
IF EXISTS(Select 1 from fruit_stock where identification=@id)
     SET @New_ID=MAX(identification)+1 FROM fruit_stock -- It Will give you Random Number

OR

DECLARE @ID INT ,@New_ID INT
IF EXISTS(Select 1 from fruit_stock where identification=@id)
     SET @New_ID=ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT))-- It Will give you Random Number

答案 2 :(得分:0)

如果您需要在客户端生成标识符(在分布式系统中可能是必需的,当对中央数据库的访问并不总是可靠时),您可以使用Guid代替{ {1}}作为您的主要标识符。使用int在本地生成它,使用Microsoft数据库,您可以将表中列的类型定义为Guid.NewGuid()