【问题标题】:Application_end event doesn't update the database when I close visual studio当我关闭 Visual Studio 时,Application_end 事件不会更新数据库
【发布时间】:2020-05-18 17:21:00
【问题描述】:

这是我的Application_End C# 代码,用于使用数组中的值更新数据库表:

protected void Application_End(object sender, EventArgs e)
    {
        string conStr = Session["ConnectionString"].ToString();
        string CMDDDStr = "SELECT * FROM Portfolio";

        bool continueFlag = true; //use that somehow

        if (continueFlag)
        {
            SqlDataAdapter daa = new SqlDataAdapter(CMDDDStr, conStr);
            DataSet dss = new DataSet();
            daa.Fill(dss);
            for (int i = 0; i < dss.Tables[0].Rows.Count - 4; i++)
            {
                int[] services = (int[])Application["services"];
                int index0 = services[i];
                dss.Tables[0].Rows[i][i+4] = index0;
                //// Create connected scenario connection
            }
            SqlCommandBuilder builder = new SqlCommandBuilder(daa);
            daa.UpdateCommand = builder.GetUpdateCommand();
            daa.Update(dss);
        }
    }

这是我的数据库表的 SQL:

CREATE TABLE [dbo].[Portfolio] (
[Description] NVARCHAR (MAX)  NULL,
[ImageData]   VARBINARY (MAX) NULL,
[delete]      NVARCHAR (50)   NULL,
[id]          INT             IDENTITY (1, 1) NOT NULL,
[service0]    INT             NULL,
[service1]    INT             NULL,
[service2]    INT             NULL,
[service3]    INT             NULL,
[service4]    INT             NULL,
PRIMARY KEY CLUSTERED ([id] ASC)
);

问题是......这没有任何作用。它不更新数据库 - 有什么想法吗?

(问题出在代码上)

【问题讨论】:

  • this answer 中的最后一条评论可能解释了您所看到的。 Application_End 在应用程序崩溃或被强制关闭时不会被调用
  • 补充一点:调用数据库可能不是关闭应用程序的最佳方法。
  • @Xerillio 我知道这不是最好的主意,它是学校的一项任务,所以我必须这样做......我可以使用什么以便任何时候关闭视觉工作室(强制- 按下 X 按钮)该代码将运行?
  • 我认为您不需要以下可能导致问题的说明:daa.UpdateCommand = builder.GetUpdateCommand();新的 SqlCommandBuilder(daa);已经在构建更新命令,看起来您可能正在杀死自动生成的命令。
  • @jdweng 没有它仍然无法工作......

标签: c# sql asp.net sql-server global-asax


【解决方案1】:
string conaaaStr = Session["ConnectionString"].ToString();
        string CMDDDStr = "SELECT * FROM Portfolio";

        bool continuaeFlag = true; //use that somehow

        if (continuaeFlag)
        {
            SqlDataAdapter daa = new SqlDataAdapter(CMDDDStr, conaaaStr);
            DataSet dss = new DataSet();
            daa.Fill(dss);
            for (int i = 0; i < dss.Tables[0].Columns.Count - 4; i++)
            {
                int[] services = (int[])Application["services"];
                int index0 = services[i];
                dss.Tables[0].Rows[0][i + 4] = index0;
                //// Create connected scenario connection
            }
            SqlCommandBuilder builder = new SqlCommandBuilder(daa);
            builder.GetUpdateCommand();
            daa.Update(dss);
        }

【讨论】:

  • 行builder.GetUpdateCommand();什么都不做。将行更改为列没有意义:for (int i = 0; i
  • @jdweng 确实如此。数据库有 5 列,我在服务 0 到 5 上运行循环。通过在行上运行它,您正在对表数据运行循环。但是通过在列上运行它,它实际上是在跟踪可用服务的数量并以此为基础运行。这样做的另一个好处是动态性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2013-12-11
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多