[asp.net-mvc]ASP.NET 和 SQL 传递给存储过程的一类吗?

发布时间: 2017/3/25 2:12:37
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

ASP.NET MVC 4 上课就像这样︰

public class CellModel
    {
        public uint scheduleTaskID { get; set; }
        public string task { get; set; }
        public string baselineDate { get; set; }
        public string scheduledDate { get; set; }
        public string actualDate { get; set; }
        public string finishedDate { get; set; }
        public string expectedStart { get; set; }
        public string expectedFinish { get; set; }
        public string plusMinus { get; set; }
        public string completedBy { get; set; }
        public bool selected { get; set; }
        public bool isEditableRow { get; set; }
        public uint sortOrder { get; set; }

        public override string ToString()
        {
            return scheduleTaskID.ToString();
        }
    }

我有一个 SQL 存储过程如下所示︰

USE [database]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[PostScheduledTasks] 
    -- Add the parameters for the stored procedure here
    @actualStart datetime = NULL, 
    @actualFinish datetime = NULL,
    @actualEndDate datetime = NULL,
    @UserDate1 datetime = NULL,
    @IsCompleted bit = 0,
    @PercentComplete float = 0.0,
    @UStmp varchar(10) = NULL,
    @SchedukeTaskID int = 0,
    @SortOrder int = 0
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    UPDATE ScheduleTasks  
                      SET 
                          ActualStart=@actualStart,
                          ActualFinish=@actualFinish,
                          ActualEndDate=@actualEndDate,
                          UserDate1=@UserDate1,
                          IsCompleted=@IsCompleted,
                          PercentComplete=@percentComplete,
                          UStmp = @UStmp
                      WHERE ScheduleTaskID = @SchedukeTaskID
                      AND SortOrder = @SortOrder
END

现在我的手机可能有多个项目,我的问题是我应该遍历.NET 运行存储的过程如何过很多次的班里有项目中的类。或有远向存储过程传递全班同学并在类中运行的每一项的更新吗?

这里是我已开始通过.NET 与︰

public UserModel PostScheduledTasks(List<CellModel> cells)
        {

            try
            {
                using (connection = new SqlConnection(connectionString))
                {
                    connection.Open();

                    using (SqlCommand command = new SqlCommand("PostScheduledTasks", connection))
                    {
                        command.CommandType = CommandType.StoredProcedure;

                        /*SqlParameter parameter1 = new SqlParameter("@jobNoPO", SqlDbType.VarChar);
                        parameter1.Value = jobNoPO;
                        parameter1.Direction = ParameterDirection.Input;
                        command.Parameters.Add(parameter1);*/

                        command.ExecuteNonQuery();

                        UserModel userModel = new UserModel();
                        userModel.name = "true";
                        userModel.userName = "true";
                        return userModel;
                    }
                }
            }
            catch
            {
                UserModel nullModel = new UserModel();
                nullModel.name = "NFD";
                nullModel.userName = "NFD";
                return nullModel;
            }
            finally
            {
                connection.Close();
            }
        }

解决方法 1:

有是没有办法将类传递给 SQL Server。 他们是两个不同的平台。 有一些工具,这将使 SQL 表看起来像类 (如实体框架) 您还可以允许您使用类和对象在运行时创建与 SQL 进行交互的工具。 事实上,我写了一个。 它是非常简单,只有一个文件由组成。

https://gist.github.com/hoganlong/b7f5c5e8dde61ae3cd6f

这里是如何可以使用的一个例子。

SuperSimple.DB.ExecuteNonQuery("spName", 
                               "connectionStr", 
                               CommandType.StoredProcedure, 
                               new { p1 = "a", p2 = "b" });

这将调用两个参数为 p1 和 p2 基于动态类 spName。

如果你这样做

CellModel test = new CellModel() // etc
SuperSimple.DB.ExecuteNonQuery("PostScheduledTasks", 
                               "connectionStr", 
                               CommandType.StoredProcedure, 
                               test );

它会失败,因为 PostScheduledTasks 没有参数的所有字段的假说。

您可以修改存储的过程接受所有字段。

或者,您可以修改我的代码,不要将所有字段。 例如你可以使用元数据装修来标记要通过哪些字段。 其他更复杂的工具做这样的事 — — 我的工具的目的是要尽可能的简单。

赞助商