中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.net+mssql制作抽獎程序思路及源碼怎么編寫

發布時間:2021-10-18 10:12:51 來源:億速云 閱讀:126 作者:柒染 欄目:數據庫

這期內容當中小編將會給大家帶來有關.net+mssql制作抽獎程序思路及源碼怎么編寫,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

抽獎程序:

思路整理,無非就是點一個按鈕,然后一個圖片旋轉一會就出來個結果就行了,可這個程序的要求不是這樣的,是需要從數據庫中隨機抽取用戶,根據數據庫中指定的等級和人數,一鍵全部抽出來結果就行了。同時需要存儲到數據庫。還需要一個導出的功能。

不能遺漏的是,如果通過隨機數根據id來抽取的話,需要考慮id不連續的問題,如果全部取出id也不現實。盡量少的去讀寫數據庫。

數據庫:

 代碼如下: CREATE TABLE [dbo].[users]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](50) NOT NULL, [phone] [nvarchar](50) NULL,CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ( [id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

CREATE TABLE [dbo].[result]([id] [int] IDENTITY(1,1) NOT NULL,[usersid] [int] NOT NULL,[awardsid] [int] NOT NULL,CONSTRAINT [PK_result] PRIMARY KEY CLUSTERED ([id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

CREATE TABLE [dbo].[awards]([id] [int] IDENTITY(1,1) NOT NULL,[Name] [nvarchar](50) NOT NULL,[Number] [int] NOT NULL,CONSTRAINT [PK_awards] PRIMARY KEY CLUSTERED ([id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

CREATE VIEW [dbo].[view1]ASSELECT dbo.result.id AS resultid, dbo.users.id, dbo.users.name, dbo.users.phone, dbo.awards.Name AS awardnameFROM dbo.awards INNER JOIN dbo.result ON dbo.awards.id = dbo.result.awardsid INNER JOIN dbo.users ON dbo.result.usersid = dbo.users.id

CREATE PROCEDURE [dbo].[getranddata] --這個地方的參數是后臺調用傳的參數,兩個變量之間需要“,”號分開@count int, --剩余獎項大小@awards int --獎項的idAS BEGIN --這個地方定義的參數是存儲過程內部用到的DECLARE @minid int --最大idDECLARE @maxid int --最小idDECLARE @randnum int --隨機數臨時變量DECLARE @exist int --查詢結果

SET @minid = (SELECT top 1 id FROM users ORDER BY id ASC) --查詢最小idSET @maxid = (SELECT top 1 id FROM users ORDER BY id DESC) --查詢最大id--set @count = 100--set @awards = 1--嵌套語句begin開始,end結束while @count>0 BEGINSELECT @randnum = ROUND(((@maxid - @minid -1) * RAND() + @minid), 0)SET @exist = (SELECT count(*) FROM users WHERE id=@randnum) IF @exist = 1 BEGININSERT INTO result(usersid,awardsid)VALUES(@randnum, @awards)SET @count = @count - 1 END END END

其中三張表,一個視圖,一個存儲過程。

后臺代碼:

 代碼如下: protected void Button1_Click(object sender, EventArgs e){ SqlConnection sqlcon = new SqlConnection("server=.;database=test;uid=sa;pwd=123"); sqlcon.Open(); SqlDataAdapter sqlsda = new SqlDataAdapter("select * from awards", sqlcon); ds = new DataSet(); sqlsda.Fill(ds); DataTable dt = ds.Tables[0].Copy(); ds.Clear(); int count = dt.Rows.Count;

for (int i = 0; i < count; i++) { SqlCommand sqlcmd = new SqlCommand("getranddata", sqlcon); SqlParameter pcount = new SqlParameter("@count", Convert.ToInt32(dt.Rows[i]["Number"])); SqlParameter pawards = new SqlParameter("@awards", Convert.ToInt32(dt.Rows[i]["id"])); sqlcmd.Parameters.Add(pcount); sqlcmd.Parameters.Add(pawards); sqlcmd.CommandType = CommandType.StoredProcedure; sqlcmd.ExecuteNonQuery();

sqlsda = new SqlDataAdapter("select top " + Convert.ToInt32(dt.Rows[i]["Number"]) + " * from view1 order by resultid desc", sqlcon); sqlsda.Fill(ds, "t" + i.ToString());

switch (i) { case 0: GridView1.DataSource = ds.Tables["t" + i.ToString()].Copy().DefaultView; GridView1.DataBind(); break; case 1: GridView2.DataSource = ds.Tables["t" + i.ToString()].Copy().DefaultView; GridView2.DataBind(); break; case 2: GridView3.DataSource = ds.Tables["t" + i.ToString()].Copy().DefaultView; GridView3.DataBind(); break; default: break; } } sqlcon.Close();}

獎項設置:

抽獎結果:

=================================================================

知識點:

SQL - 生成指定范圍內的隨機數

 代碼如下: DECLARE @Result INT DECLARE @Upper INT DECLARE @Lower INTSET @Lower = 1SET @Upper = 10SELECT @Result = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)SELECT @Result

ROUND()函數:返回按指定位數進行四舍五入的數值。

RAND()函數:生成隨機數。

SQL循環語句嵌套

代碼如下: DECLARE @i intSET @i=1 while @i<8 BEGIN IF @i<5 print space(4-@i)+REPLICATE('*',2*@i-1) ELSE print space(@i-4)+REPLICATE('*',15-2*@i)SET @i=@i + 1 END

上述就是小編為大家分享的.net+mssql制作抽獎程序思路及源碼怎么編寫了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绵阳市| 兴安县| 宣化县| 盖州市| 策勒县| 塔城市| 云安县| 甘南县| 都江堰市| 崇义县| 台南县| 南召县| 申扎县| 遂昌县| 大竹县| 台东市| 六安市| 綦江县| 五原县| 瑞金市| 五莲县| 姚安县| 多伦县| 饶阳县| 保德县| 肥东县| 商南县| 东方市| 高密市| 永善县| 蓝田县| 清河县| 三亚市| 磐安县| 安国市| 孟连| 中超| 枣阳市| 北海市| 资溪县| 共和县|