c# - 用仅包含数值的行填充 Gridview 的查询没有给我想要的结果

标签 c# mysql asp.net excel gridview

我上传了一个 Excel 文件,并将行排序到 2 个表中,一个包含有效且可接受的数据,另一个包含需要编辑才能验证的数据。 我有 3 列:姓名、电子邮件和手机 我在查询具有有效移动值(数字值,不允许字母)的行时遇到问题

(向下滚动直到看到“我的问题在下面的查询中” 这是我的代码:

 protected void UploadBtn_Click(object sender, EventArgs e)
    {
        string filename = string.Empty;
        if(FileUpload1.HasFile)
        {

            try
            {
                string[] allowFile = { ".xls", ".xlsx" };
                string fileExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
                bool isVaidFile = allowFile.Contains(fileExt);
                if (!isVaidFile)
                {
                    MessageLbl.ForeColor = System.Drawing.Color.Red;
                    MessageLbl.Text = "Must be an Excel file";
                }
                else
                {
                    int fileSize = FileUpload1.PostedFile.ContentLength;
                    if (fileSize <= 1048576)
                    {
                        filename = Path.GetFileName(Server.MapPath(FileUpload1.FileName));
                        FileUpload1.PostedFile.SaveAs(Server.MapPath("~/UploadExcel/") + filename);
                        string filePath = Server.MapPath("~/UploadExcel/") + filename;
                        OleDbConnection con = null;
                        if (fileExt == ".xls")
                        {
                            con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";");
                        }
                        else if (fileExt == ".xlsx")
                        {
                            con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";");
                        }
                        con.Open();
                        DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                        string getExcelSheetName = dt.Rows[0]["Table_Name"].ToString();
                        OleDbCommand ExcelCommand = 
                            new OleDbCommand(@" SELECT * FROM [" + getExcelSheetName + @"]", con);
                        OleDbCommand EditExcelCommand = 
                            new OleDbCommand(@" SELECT * FROM [" + getExcelSheetName + @"] where Email not like '%@%.com' or Email is null or Name is null or Mobile is null or Mobile not like '^[[:digit:]]+$'", con);
                        //
                        //
                        // MY PROBLEM IS IN THE BELOW QUERY
                        //
                        //
                        OleDbCommand ValidExcelCommand =
                            new OleDbCommand(@"SELECT * FROM [" + getExcelSheetName + @"] where ((Email like '%@%.com') and (Name is not null) and (Mobile like '^[[:digit:]]+$'))", con);
                        OleDbDataAdapter EditAdapter = new OleDbDataAdapter(EditExcelCommand);
                        OleDbDataAdapter ValidAdapter = new OleDbDataAdapter(ValidExcelCommand);
                        OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand);
                        DataSet ExcelDataSet = new DataSet();
                        DataSet EditDataSet = new DataSet();
                        DataSet ValidDataset = new DataSet();
                        EditAdapter.Fill(EditDataSet);
                        ValidAdapter.Fill(ValidDataset);
                        ExcelAdapter.Fill(ExcelDataSet);
                        con.Close();
                        GridView5.DataSource = ValidDataset;
                        GridView4.DataSource = EditDataSet;
                        GridView3.DataSource = ExcelDataSet;
                        GridView3.DataBind();
                        GridView4.DataBind();
                        GridView5.DataBind();
                    }
                    else
                    {
                        MessageLbl.Text = "Attachment file size should not be greater than 1 MB";
                    }
                }
            }
            catch (Exception ex)
            {
                MessageLbl.Text = "Error occurred while uploading file. " + ex.Message;
            }
        
        }
        else
        {
            MessageLbl.Text = "";
        }
       
        
    }

图像包含我得到的结果

GRIDVIEW RESULTS

我的问题是为什么我的 ValidTable 仍为空?我的查询语句有问题吗?

最佳答案

您的代码看起来有效,我怀疑您的 select 语句可能有问题。创建一个简单的字符串变量并将其设置为等于以下命令:

   string validExcelCommandText = "SELECT * FROM [" + getExcelSheetName + @"] where ((Email like '%@%.com') and (Name is not null) and (Mobile like '^[[:digit:]]+$'))";

在此行上放置一个断点并运行您的应用程序,获取 validExcelCommandText 的值并在 SQL Server Management Studio 中运行查询。如果它没有返回任何结果,则修复您的 SQL 查询如果确实如此,请确保页面上没有隐藏 GridView 控件的逻辑,或检查后面代码中的绑定(bind)。

关于c# - 用仅包含数值的行填充 Gridview 的查询没有给我想要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38099363/

相关文章:

c# - 如何在 .NET 程序集中找到相应的 .pdb?

c# - 跟踪点有什么用途?

.net - 我应该在下一个 Web 应用程序开发中使用 WPF 还是 ASP.NET?

c# - NoSQL - 如何模拟数据库进行单元测试?

c# - 将字符串的值转换为 C# 中的类型

c# - 将日期时间插入 Access

jquery - 数据表分页搜索框不起作用

c# - 将 list 框项目与数组进行比较

mysql - @UniqueConstraint 可空字段

mysql - 优化 - 从循环内的 TEMP TABLE 中进行选择以获取 JSON 值的平均值的函数