如何检查是否满足字符串查询条件

时间:2019-10-10 16:03:00

标签: c# oledbcommand

我有一个文件上传器,可将excel文件上传到MySQL服务器中的数据库。文件上传器工作正常,我还制作了一个网格视图,该视图将在下面的部分中显示所有上传文件的历史记录。

现在,我正在尝试开发一些代码,以使文件上传器能够检查数据库,以了解上传的文件何时有重复的行,并询问用户是否要将旧记录替换为新记录。

注意:重复项不是100%相等。例如,在这种情况下,重复项将具有相同的ID,年份和月份,但值不同。换句话说,尽管有该值,但在特定的年份和月份中只能有一个ID。

这是我到目前为止所拥有的。将不确定的代码标记为注释,以便实现我提到的内容。

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 个答案:

答案 0 :(得分:1)

这只是查看数据的替代方式。老实说,我不喜欢.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);
        }

    }