Как я могу проверить, выполняется ли условие запроса строки - PullRequest
0 голосов
/ 10 октября 2019

У меня есть загрузчик файлов, который загружает файлы Excel в базу данных на сервере MySQL. Загрузчик файлов работает нормально, и я также сделал сетку, которая покажет историю всех загруженных файлов в разделе ниже.

Теперь я пытаюсь разработать некоторый код, который позволил бы загрузчику файлов проверятьбаза данных, когда в загруженном файле есть повторяющиеся строки, и спросите пользователя, не хочет ли он заменить старую запись на новую.

Примечание: дубликаты не равны на 100%. Например, в этой ситуации дубликат будет иметь тот же идентификатор, год и месяц, но разное значение. Другими словами, может быть только один идентификатор для определенного года и месяца, несмотря на значение.

Вот то, что я имею до сих пор. Помечен как комментарий код, где я не уверен, что делать, чтобы добиться того, что я упомянул.

protected void Button1_Click(object sender, EventArgs e)
        {
            String sID_VARIAVEL;
            int sANO;
            int sMES;
            int sCOD_DATA;
            String sINSTALACAO;
            String sVALOR;
            string path = Path.GetFileName(FileUpload1.FileName);
            path = path.Replace(" ", "");
            FileUpload1.SaveAs(Server.MapPath("~/Upload/") + path);
            String ExcelPath = Server.MapPath("~/Upload/") + 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 cmd = new OleDbCommand("select * from [Sheet1$]", mycon);
            OleDbDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {
                sID_VARIAVEL = dr[0].ToString();
                sANO = Convert.ToInt32(dr[1].ToString());
                sMES = Convert.ToInt32(dr[2].ToString());
                sCOD_DATA = Convert.ToInt32(dr[3].ToString());
                sINSTALACAO = dr[4].ToString();
                sVALOR = dr[5].ToString();
                savedata(sID_VARIAVEL, sANO, sMES, sCOD_DATA, sINSTALACAO, sVALOR);

                /*String query = "SELECT * FROM VALOR WHERE ID_VARIAVEL = '" + sID_VARIAVEL + "' AND ANO = '" + sANO + "' AND MES = '" + sMES + "' ";
                Boolean parsedquery;
                String myconn = "Data Source=agrsql004\\instance01; Initial Catalog=TrainingDB; User id=SQLLOCAL; Password=123456";
                SqlConnection conn = new SqlConnection(myconn);
                conn.Open();
                SqlCommand command = new SqlCommand();
                command.CommandText = query;
                command.Connection = conn;
                command.ExecuteNonQuery();
                SqlDataReader reader = command.ExecuteReader();
                if ()
                {
                    DialogResult result = MessageBox.Show("????", "Confirmation", MessageBoxButtons.YesNoCancel);
                }*/
            }

            DataTable dt = new DataTable();
            dt.Columns.Add("File", typeof(string));
            dt.Columns.Add("Size", typeof(string));
            dt.Columns.Add("Type", typeof(string));
            dt.Columns.Add("YourDateField", typeof(DateTime));

            foreach (string strFile in Directory.GetFiles(Server.MapPath("~/Upload/")))
            {
                FileInfo fi = new FileInfo(strFile);

                dt.Rows.Add(fi.Name, fi.Length, GetFileTypeByExtension(fi.Extension), fi.CreationTime);
            }

            GridView1.DataSource = dt;
            GridView1.DataBind();
        }


        private void savedata(String sID_VARIAVEL1, int sANO1, int sMES1, int sCOD_DATA1, String sINSTALACAO1, String sVALOR1)
        {
            String query = "insert into VALOR (ID_VARIAVEL, ANO, MES, COD_DATA, INSTALACAO, VALOR) values('" + sID_VARIAVEL1 + "','" + sANO1 + "','" + sMES1 + "','" + sCOD_DATA1 + "','" + sINSTALACAO1 + "','" + sVALOR1 + "')";
            String mycon = "Data Source=agrsql004\\instance01; Initial Catalog=TrainingDB; User id=SQLLOCAL; Password=123456";
            SqlConnection con = new SqlConnection(mycon);
            con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = query;
            cmd.Connection = con;
            cmd.ExecuteNonQuery();
        }

1 Ответ

1 голос
/ 11 октября 2019

Это просто альтернативный способ просмотра данных. Мне, честно говоря, не нравятся документы .xlx, поэтому я склонен использовать .csv или .txt (табуляция или запятая). Кроме того, мы обычно не используем пакеты NUGET в нашем программном обеспечении, поэтому эти хорошие конвертеры Excel не подходят (хотя они могут быть для вас). Вы можете изменить это для документа Excel. Первоначально я написал это в VB, поэтому пришлось преобразовать его в C #.

using System;
using System.IO;
using System.Text;
using System.Data;
using System.Collections.ObjectModel;

    private DataTable _dt;
    private Collection<int> _rowsNeedUpdated;

    public void TestFunction()
    {
        string[] lines = File.ReadAllLines(Server.MapPath("~/Files/ImportData_TabDelimited.txt"), Encoding.UTF8);
        bool isFirstLine = true;

        foreach (string line in lines)
        {
            if (isFirstLine)
            {
                string[] headers = line.Split('\t');
                foreach (string header in headers)
                {
                    // dont want any whitespaces
                    _dt.Columns.Add(header.Replace(" ", ""));
                }

                isFirstLine = false;
                continue;
            }

            string[] items = line.Split('\t');
            DataRow row = _dt.NewRow();

            for (int i = 0; i < _dt.Columns.Count; i++)
            {
                row[_dt.Columns[i].ColumnName] = items[i];
            }

            _dt.Rows.Add(row);
        }

        // these are just methods of getting specific row data (similar to a SQL WHERE clause)
        DataRow[] rows = _dt.Select("ID_VARIAVEL = '5'");
        DataRow[] rows2 = _dt.Select(String.Format("ID_VARIAVEL LIKE '%{0}%' AND ANO = '1'", "formattedString"));




        for (int i = 0; i < _dt.Rows.Count; i++)
        {
            // get each datarow item
            // example
            string id = (string)_dt.Rows[i]["columnName"];

            // execute SQL query and check the return value based on my previous comments
            // if it needs to be updated, capture the row to update later
            _rowsNeedUpdated.Add(i);
        }

    }
...