如何解决两次插入数据的问题

时间:2019-07-08 20:41:40

标签: c#

我有一个代码,可以通过fileuploader上传文件,还有一个InsertCommand,它可以插入属于该文件的数据。

那很好,但是如果字符串“ maxId”没有结果,他将两次运行按钮代码,两次上传文件,最后两次插入数据。

有什么想法吗? 请参阅我的以下代码:

if (Bericht_Hochladen.HasFile)
{
    SqlCommand commandMaxActionDocID = new SqlCommand("SELECT MAX(actiondoc_id) FROM tbl_action WHERE SUBSTRING(actiondoc_nr, 2, 7) ='" + newNumber.Substring(newNumber.Length - 7) + "'", conn);
    string maxId = commandMaxActionDocID.ExecuteScalar().ToString();


    if (maxId == "")
    {
        neue_nr = newNumber.ToString() + "_" + DateTime.Now.ToString("yyyy-MM-dd", ci) + "_" + docart + "_DOC001";
    }
    else
    {
        SqlCommand commandMaxActionDocNR = new SqlCommand("SELECT actiondoc_nr FROM tbl_action_1100 WHERE actiondoc_id = @maxId", conn);
        commandMaxActionDocNR.Parameters.AddWithValue("@maxId", maxId.ToString());
        string NrMitT = commandMaxActionDocNR.ExecuteScalar().ToString();

        string count_str = NrMitT.Substring(NrMitT.Length - 3, 3);
        int count_int = Int32.Parse(count_str);
        count_int = count_int + 1;
        count_str = count_int.ToString("000");

        neue_nr = newNumber.ToString() + "_" + DateTime.Now.ToString("yyyy-MM-dd", ci) + "_" + docart + "_DOC" + count_str;
    }

    string dateiendung = Path.GetExtension(Bericht_Hochladen.FileName);
    string todaydate = DateTime.Today.ToString("yyyy-MM-dd");
    string dokumentname = neue_nr;


    #region [Datenupload WebDAV]
    Bericht_Hochladen.PostedFile.SaveAs(HttpContext.Current.Server.MapPath("~/TemporaryUploadedFiles/") + dokumentname + dateiendung);

    SqlCommand commandVerweis = new SqlCommand("SELECT pfad_adresse FROM tbl_sys_pfad WHERE pfad_nr = 102", conn);
    string verweis = (string)commandVerweis.ExecuteScalar();


    //temporäreres Speichern auf dem WebServer
    FileStream fstream = new FileStream(HttpContext.Current.Server.MapPath("~/TemporaryUploadedFiles/") + dokumentname + dateiendung, FileMode.OpenOrCreate, FileAccess.Read);



    HttpWebRequest request_folder = (HttpWebRequest)WebRequest.Create(filepath);
    request_folder.Credentials = new NetworkCredential(szUsername, szPassword);
    try
    {
        // Specify the MKCOL method.
        request_folder.Method = "MKCOL";
        HttpWebResponse response_folder = (HttpWebResponse)request_folder.GetResponse();
        Response.Close();
    }
    catch (Exception ex)
    {
        //MessageBox.Show(ex.ToString());
    }


    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(filepath + dokumentname + dateiendung);

    request.Credentials = new NetworkCredential(szUsername, szPassword);
    try
    {
        request.Method = @"PUT";
        request.ContentLength = fstream.Length;
        request.AllowWriteStreamBuffering = true;
        request.SendChunked = false;
        request.KeepAlive = false;
        Stream request_stream = request.GetRequestStream();

        byte[] indata = new byte[1024];
        int bytes_read = fstream.Read(indata, 0, indata.Length);
        while (bytes_read > 0)
        {
            request_stream.Write(indata, 0, indata.Length);
            bytes_read = fstream.Read(indata, 0, indata.Length);
        }
        fstream.Close();
        request_stream.Close();

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
        {
            //MessageBox.Show("Couldn't upload file");
        }
    }
    catch (Exception ex)
    {
        //MessageBox.Show(ex.ToString());
    }
    string del_URL = HttpContext.Current.Server.MapPath("~/TemporaryUploadedFiles/") + dokumentname + dateiendung;
    File.Delete(del_URL);
    #endregion


    SqlCommand commandDocUpload = new SqlCommand("INSERT INTO tbl_action(actiondoc_action_id, actiondoc_nr, actiondoc_art, actiondoc_pfad, actiondoc_datum, actiondoc_endung, actiondoc_bem, sys_crt_user, sys_crt_timestamp, sys_deleted) VALUES (@actiondoc_action_id, @actiondoc_nr, @actiondoc_art, @actiondoc_pfad, @actiondoc_datum, @actiondoc_endung, @actiondoc_bem, @sys_crt_user, @sys_crt_timestamp, @sys_deleted)", conn);
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_action_id", (string)Session["action_id"].ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_nr", neue_nr.ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_art", Session["dokument_art_volltext"].ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_pfad", neue_nr.ToString() + dateiendung.ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_datum", DateTime.Now.ToString("yyyy-MM-dd", ci)));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_endung", dateiendung.ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@actiondoc_bem", txtBeschreibungDoc.Text));
    commandDocUpload.Parameters.Add(new SqlParameter("@sys_crt_user", (string)Session["login"].ToString()));
    commandDocUpload.Parameters.Add(new SqlParameter("@sys_crt_timestamp", DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss", ci)));
    commandDocUpload.Parameters.Add(new SqlParameter("@sys_deleted", "0"));

    commandDocUpload.ExecuteNonQuery();

    conn.Close();

    if (IsPostBack)
    {
        //Do Something
        return;
    }
}

1 个答案:

答案 0 :(得分:-1)

尝试更改此行:

string maxId = commandMaxActionDocID.ExecuteScalar().ToString();

对此:

string maxId  = Convert.ToString(commandMaxActionDocID.ExecuteScalar());

供参考:

Difference between Convert.ToString() and .ToString()

我认为这是您的ExecuteScalar()返回的if语句无法识别的内容,因此它只是跳过它,然后一旦添加数据,就填充该值。您是否有调用该方法的代码?这可能会有所帮助。

编辑: 大卫,尝试将您的控件更改为此:

<div class="pull-left btn-mybtn"> <asp:Button ID="btnDateiHochladen" runat="server" Text="Hochladen" CssClass="font-regular btn-mybtn pull-right"/> </div>

此外,您(C#)后面的代码是否对此特定按钮具有OnCommand或OnClick事件?