C# 从数据库中获取测验游戏的随机记录

C# 从数据库中获取测验游戏的随机记录,c#,asp.net,sql-server,web-services,windows-phone-7,C#,Asp.net,Sql Server,Web Services,Windows Phone 7,我需要您帮助创建查询。我是软件行业的新手,我正在尝试为Windows Mobile应用程序开发一款KBC类型的问答游戏。为此,我想尝试从数据库中获取随机记录,若一条记录在该记录之后一次出现,那个么该记录将不会再次出现。我使用这个查询“通过NEWID()从测验顺序中选择前1*”,但记录是重复的 我的表格结构如下所示 ColumnName DataType Id int Que varchar(150) Ans1 varchar(100) Ans2

我需要您帮助创建查询。我是软件行业的新手,我正在尝试为Windows Mobile应用程序开发一款KBC类型的问答游戏。为此,我想尝试从数据库中获取随机记录,若一条记录在该记录之后一次出现,那个么该记录将不会再次出现。我使用这个查询
“通过NEWID()从测验顺序中选择前1*”
,但记录是重复的

我的表格结构如下所示

ColumnName  DataType

Id          int
Que         varchar(150)
Ans1        varchar(100)
Ans2        varchar(100)
Ans3        varchar(100)
TrueAns     varchar(100)
我尝试创建一个存储过程,如下所示

DECLARE @counter int, @randno int, @uBound int, @lBound int


        SELECT @uBound = Max(Id) FROM Quiz
        SELECT @lBound = Min(Id) FROM Quiz

        SELECT @randno = Round(((@uBound - @lBound) * Rand() + @lBound), 0)
        SET @Counter = 0

        WHILE @counter = 0
        BEGIN
            IF EXISTS(SELECT Id FROM Quiz WHERE Id = @randno)
            BEGIN
                SET NOCOUNT OFF
                SELECT * FROM Quiz WHERE Id = @randno
                SET @counter = 1
            END
            ELSE
            BEGIN
                SELECT @randno = Round(((@uBound - @lBound -1 ) * Rand() + @lBound), 0)
            END
        END

但是我不能成功。我的表包含以下字段Que、Ans1、Ans2、Ans3、TrueAns。请帮我解决这个问题。我还想创建一个web服务,它返回所有记录

只需在quick isread中添加一列作为bool,并将其设置为默认值false

然后使您的存储过程看起来有助于您使用webservice方法

DECLARE @counter int, @randno int, @uBound int, @lBound int


        SELECT @uBound = Max(Id) FROM Quiz
        SELECT @lBound = Min(Id) FROM Quiz

        SELECT @randno = Round(((@uBound - @lBound) * Rand() + @lBound), 0)
        SET @Counter = 0

        WHILE @counter = 0
        BEGIN


If(( select count(*) from Quiz where isread= true)=( select count(*) from Quiz ))
BEGIN
 update Quiz SET isread=false  
End

            IF EXISTS(SELECT Id FROM Quiz WHERE Id = @randno and isread=false )
            BEGIN
            update Quiz SET isread=true  WHERE Id = @randno                   
            SET NOCOUNT OFF
                SELECT * FROM Quiz WHERE Id = @randno

                SET @counter = 1
            END
            ELSE
            BEGIN
                SELECT @randno = Round(((@uBound - @lBound -1 ) * Rand() + @lBound), 0)
            END
        END

一个想法可能是发送预先询问的问题的Id,并添加Id不在(1,2,3,4,…)或类似内容中的位置。虽然我更喜欢在codebehind上进行控制,而不是在sql查询中。谢谢你的回复,但我想为这个游戏创建一个web服务,我不能用codebehind编写所有代码。如果我使用存储过程,我的工作量会非常少,我只是在我的asmx页面中调用该过程。非常感谢,但是当所有isread列数据都为真时,如何使其再次为假,因此当再次开始测试时,将其改为该数据。在获得所有真值后检查我编辑的一个更新全部为假,在条件继续的情况下,它会发生错误,如不正确语法,但在innerquery中它工作正常现在检查它是否完美,并告诉我是否得到了您的解决方案