我一直在我的程序中创建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);
}
}
}
}
答案 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()
。