【问题标题】:Trouble including a string in an SQL query for an Excel Spreadsheet在 Excel 电子表格的 SQL 查询中包含字符串时遇到问题
【发布时间】:2015-01-19 12:54:13
【问题描述】:

我正在使用 C# 通过 ASP.net Web 表单显示 Excel 电子表格中的数据。我想对数据运行 SQL 查询,但无法弄清楚如何在我的查询中使用字符串。

这是我在 .aspx.cs 文件中运行的代码。我还使用 .aspx 在GridView 中显示数据。

protected void Page_Load(object sender, EventArgs e)
{
    string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("ExcelCSTest.xls") + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

    OleDbConnection objConn = new OleDbConnection(sConnectionString);
    objConn.Open();

    string sSQL = "SELECT * FROM [Sheet1$A1:D14]";

    OleDbCommand objCmdSelect = new OleDbCommand(sSQL, objConn);
    OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
    objAdapter1.SelectCommand = objCmdSelect;

    DataSet objDataset1 = new DataSet();
    objAdapter1.Fill(objDataset1, "XLData");

    GridView1.DataSource = objDataset1.Tables[0].DefaultView;
    GridView1.DataBind();

    objConn.Close();
}

理想情况下,我想在我的string sSQL = "SELECT * FROM [Sheet1$A1:D14]"; 中添加一个WHERE 子句,以便查询当前月份并从Excel 电子表格中显示该月份的行。

【问题讨论】:

  • Excel 是您可以在网站中使用的最糟糕的数据源。即使是平面文件也会更好。
  • @TomyVarghese 提到“包含 where 子句时出现的错误是什么?”

标签: c# asp.net excel tsql oledb


【解决方案1】:

我已经为您重写了代码,但是,您应该认真考虑遵守一些编码标准。请不要以数字结束您的变量,并考虑格式化您的代码,这样它就更具可读性。您还需要将您的OleDbConnection() 包含在using 语句中,然后它会被正确处理。

这是格式化和重新编写的代码

public partial class ExcelAdapter : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("ExcelCSTest.xls") + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";

        using (OleDbConnection objConn = new OleDbConnection(sConnectionString))
        {
            objConn.Open();
            var sSQL = "SELECT * FROM [Sheet1$A1:D14]";
            OleDbCommand objCmdSelect = new OleDbCommand(sSQL, objConn);
            objCmdSelect.CommandType = CommandType.Text;
            DataSet objDataset = new DataSet();
            OleDbDataAdapter objAdapter = new OleDbDataAdapter(objCmdSelect).Fill(objDataset);
            objConn.Close();
        }
    }
}

我没有时间测试这段代码,但我很确定它应该是正确的。 (希望)

进一步了解本教程。这是一个很好的资源,可以让您了解如何正确地完成这项工作。

Import Excel File to DataSet

Where 子句

where 子句添加到您的 SQL 中非常容易,您可以更好地对其进行参数化以使其更加标准。

您的代码应该类似于

    var sSQL = "SELECT * FROM [Sheet1$A1:D14] WHERE currentDate = ?";
    cmd.Parameter.Add("@Param1", OleDbType.VarChar).Value = todaysDate;

有关如何进行参数化的完整示例,请查看 OleDbCommand.Parameters Property 以及有关示例的更多详细信息,您可以查看我对这个问题的回答示例 Missing Required Parameter in Parameterized Query?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多