【问题标题】:Stop Upload when a some data already exists当某些数据已经存在时停止上传
【发布时间】:2019-01-06 07:03:45
【问题描述】:

我有一个上传按钮,可以上传 excel 文件并将其保存到我的数据库中。我想要发生的是,如果该 excel 文件中有一个或多个数据已经存在,其他数据也不会上传,尽管它还不存在。我将其添加到数据库和上传按钮的代码如下。

添加到数据库

 private void AddNewTrainee(string strdelname, string strrank, string strcomp, string strcourse, string strcenter, string strinst,
                            string strsdate, string stredate, string strcissued, string strcnumber, string strremark, int recdeleted, string credate, string update, int fromupload)
{
    connection.Open();
    String checkDateAndName = "Select count(*) from Trainees where StartDate= '" + strsdate + "' and Delegate='" + strdelname + "' and REC_DELETED = 0  ";
    SqlCommand cmd = new SqlCommand(checkDateAndName, connection);
    int dataRepeated = Convert.ToInt32(cmd.ExecuteScalar().ToString());
    bool boolDataRepated;
    connection.Close();

    if (!(dataRepeated >= 1))
    {
        boolDataRepated = false;
    }
    else
        boolDataRepated = true;

    connection.Open();
    string certNumber = "Select * from CertID_Table update CertID_Table set CertificateID = CertificateID + 1 from CertID_Table ";
    SqlCommand cmdCert = new SqlCommand(certNumber, connection);

    using (SqlDataReader oReader = cmdCert.ExecuteReader())
    {
        while (oReader.Read())
        {
            string test1 = oReader["CertificateID"].ToString();
            ViewState["certnumber"] = test1;
        }
    }
    connection.Close();
    strcnumber = (string)ViewState["certnumber"];


        if (boolDataRepated == false)
        {
            string path = "D:\\Intern\\BASSWeb\\SQLCommands\\AddSQL.txt";
            StringBuilder sb = new StringBuilder();
            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    sb.Append(sr.ReadLine());
                }
                string sql = sb.ToString();
                try
                {
                    connection.Open();
                    SqlCommand cmd1 = new SqlCommand(sql, connection);
                    cmd1.Parameters.AddWithValue("@delName", strdelname);
                    cmd1.Parameters.AddWithValue("@rank", strrank);
                    cmd1.Parameters.AddWithValue("@comp", strcomp);
                    cmd1.Parameters.AddWithValue("@course", strcourse);
                    cmd1.Parameters.AddWithValue("@center", strcenter);
                    cmd1.Parameters.AddWithValue("@instructor", strinst);
                    cmd1.Parameters.AddWithValue("@sdate", strsdate);
                    cmd1.Parameters.AddWithValue("@edate", stredate);
                    cmd1.Parameters.AddWithValue("@cissued", strcissued);
                    cmd1.Parameters.AddWithValue("@cnumber", strcnumber);
                    cmd1.Parameters.AddWithValue("@remark", strremark);
                    cmd1.Parameters.AddWithValue("@rdeleted", recdeleted);
                    cmd1.Parameters.AddWithValue("@cdate", credate);
                    cmd1.Parameters.AddWithValue("@udate", update);
                    cmd1.Parameters.AddWithValue("@fupload", fromupload);
                    cmd1.CommandType = CommandType.Text;
                    cmd1.ExecuteNonQuery();
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    string msg = "Insert/Update Error:";
                    msg += ex.Message;
                    throw new Exception(msg);
                }
                finally
                {
                    connection.Close();
                }
            }
        }
        else
        {
            string script = "alert(\"The data already exists\");";
            ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
        }
}

上传按钮

 protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        try
        {
            string path = Path.GetFileName(FileUpload1.FileName);
            path = path.Replace(" ", "");
            FileUpload1.SaveAs(Server.MapPath("~/Datas/") + path);
            String ExcelPath = Server.MapPath("~/Datas/") + path;
            OleDbConnection mycon = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + ExcelPath + "; Extended Properties=Excel 8.0; Persist Security Info = False");
            mycon.Open();
            OleDbCommand cmdX = new OleDbCommand("select * from [Sheet1$]", mycon);
            OleDbDataReader dr = cmdX.ExecuteReader();
            while (dr.Read())
            {
                delegateName = dr[0].ToString();
                rankPos = dr[1].ToString();
                company = dr[2].ToString();
                courseTitle = dr[3].ToString();
                trainingCenter = dr[4].ToString();
                instructor = dr[5].ToString();
                staDa = DateTime.Parse(dr[6].ToString());
                string startDate = staDa.ToString("MM/dd/yyyy");
                endDa = DateTime.Parse(dr[7].ToString());
                string endDate = endDa.ToString("MM/dd/yyyy");
                certIssued = dr[8].ToString();
                certNum = dr[9].ToString();
                remarks = dr[10].ToString();
                recDeleted = 0;
                dateCreated = DateTime.Now.ToString("MM/dd/yyyy HH:mm");
                dateUpdated = string.Empty;
                fromUpload = 1;
                AddNewTrainee(delegateName, rankPos, company, courseTitle, trainingCenter, instructor, 
                    startDate, endDate, certIssued, certNum, remarks, recDeleted, dateCreated, dateUpdated, fromUpload);
            }
        }
        catch (Exception ex)
        {
            string errorMessage = "alert(\"ERROR: " + ex.Message.ToString() + " \");";
            ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", errorMessage, true);
        }
    }
    else
    {
        string errorMessage = "alert(\"ERROR: You have not specified a file \");";
        ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", errorMessage, true);
    }
    PopulateData();
}

【问题讨论】:

    标签: c# html asp.net file-upload web-applications


    【解决方案1】:

    我认为您需要解决一些问题才能实现最终目标。

    1. 使用多选方法并获取所有所需文件的发布列表 上传。
    2. Transaction 中提出您的处理要求
    3. 完成处理后,根据需要提交或回滚事务并保留所需的数据。

    研究一下我发布的链接。起初交易似乎有点压倒性,但它们实际上非常简单。也许我可以帮助你开始你的理解。真的只有三个额外的步骤;

    1。 创建命令后初始化事务对象。

    SqlTransaction transaction = connection.BeginTransaction();
    

    2。 在所有 Sql 命令(插入、更新、删除等)上附加事务。

    cmd.Transaction = transaction;
    

    这将允许您执行 SqlCommands,而无需将它们实际放入您的数据库中。最后,当您处理完所有插入和更新后,您可以执行最后一步。 using 语句不是必需的,只是很好的做法。这可能是您接下来想要了解的内容,它非常有帮助。

    3。 将所有 SqlCommand 提交到数据库。

    transaction.Commit();
    

    如果在数据处理过程中的任何时候出现问题,您可以像这样回滚每个事务。

    transaction.Rollback();
    

    【讨论】:

    • 我是 asp.net 的初学者,所以对语法不太熟悉。对不起
    • 好的,谢谢!我会试试这个,但这会直接解决我的问题吗?
    • 它仍然会根据要上传的行的顺序上传一些文件。我的意思是,如果文件的第一行已经存在,那么它将在一开始就停止事务,但是如果唯一的现有数据是最后一行,那么它所经历的所有其他行都将被上传,除了最后一行
    • @JMVillaflores 抱歉,我没有意识到这是您要求的一部分。该交易适用于全有或全无的情况。在调用 AddNewTrainee 之前添加另一个函数 CheckForTrainee 以查看它是否存在是否可以接受?如果它已经存在,你可以在上传中跳出你的 while 循环,或者跳过它并继续。
    • 是的,我想在调用 AddNewTrainee 之前先做一个检查,但我不知道在 while 循环中这样做。
    【解决方案2】:

    您必须将 transferMode 设置为“Streamed”,否则您将始终获得一个文件。

    看看这篇文章:https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-enable-streaming

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多