我必须设计一个应用程序,让用户为一系列问题提供答案。
下面是SQL表结构Question -列出问题的表格
评级-有评级的表
Answers-存储指定问题答案的表。
我需要的逻辑是,如何保存答案(评级id和问题id)
在超过100个问题的表中…
我是否需要生成循环或我可以在保存过程中使用逗号分隔符?
有解决方案吗?
从。net中保存多条记录到sql server表中的最佳方法是使用表值参数。
首先,需要在sql server中创建一个用户定义的表类型(UDT
):
CREATE TYPE UDT_UserAnswers AS TABLE
(
UserAnswers_UserId int,
UserAnswers_QuestionId int,
UserAnswers_RatingId int
)
其次,您需要编写接受此UDT
的过程:
CREATE PROCEDURE tblAnswers_Insert
(
@UserAnswers AS dbo.UDT_UserAnswers READONLY -- Must be readonly!
)
AS
INSERT INTO Answers(UserId, QuestionId, RatingId)
SELECT UserAnswers_UserId, UserAnswers_QuestionId, UserAnswers_RatingId
FROM @UserAnswers
GO
最后,.Net代码(使用ado.net):
// create a data table
DataTable dt = new DataTable();
dt.Columns.Add("UserAnswers_UserId", typeof(Int32));
dt.Columns.Add("UserAnswers_QuestionId", typeof(Int32));
dt.Columns.Add("UserAnswers_RatingId", typeof(Int32));
// Populate the data table here
// execute the stored procedure
using(SqlConnection con = new SqlConnection("<yourConnectionStringHere>")
{
SqlCommand cmd = new SqlCommand("tblAnswers_Insert", con);
cmd.Parameters.Add("@UserAnswers", SqlDbType.Structured).Value = dt;
cmd.ExecuteNonQuery();
}
我希望我理解你的问题。我建议您将问题保存在一个具有一些唯一PK的表中,然后将答案(在自己的表中)保存为具有QuestionId(前面提到的PK)作为外键(FK)的答案。我猜你正在评级答案,所以保存评级并添加它们AnswerId (PK从答案表)和一些域特定的属性,如(用户名,评级,…)。
现在我不知道你使用什么ORM或SQL访问平台。但是循环通常是不可以的(事务等)。如果使用存储过程或类似的方法,我建议将XML结构发送到SAVE过程中。你可以有一些临时表,当你存储的答案,当你点击gui和保存你只是执行"移动"数据从临时到"真实"存储。有很多方法,但是你没有提到你的环境。