我必须设计一个应用程序,用户可以在其中提供问题列表的答案。
下面是SQL表格结构
问题 - 列出问题的表
评级 - 具有评级的表
答案 - 存储着名问题答案的表格。
我需要的逻辑是,如何保存答案(评级ID和问题ID)
在100多个问题的表格中。
我是否需要生成循环,或者我可以在保存过程中使用逗号分隔符?
有什么解决方案吗?
答案 0 :(得分:1)
从.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();
}
答案 1 :(得分:0)
我希望我理解你的问题。我建议你用一些独特的PK在一个表中保存问题。然后将具有QuestionId(之前提到的PK)的答案(在其自己的表中)保存为外键(FK)。我猜你评价Answers soi保存评级并添加它们AnswerId(来自Answers表的PK)和一些特定领域的属性,如(UserName,Rating,...)。
现在我不知道您使用的是什么ORM或SQL访问平台。但循环通常不行(交易等)。如果您使用存储过程或类似操作,我建议您将XML结构发送到SAVE过程。当您单击gui时存储答案时可以有一些临时表,并保存您只需将数据从“临时”移动到“真实”存储。有很多方法,但你没有提到你的环境。