9

私はネットを調べて、これを尋ねる多くの人々を見つけました、それでも誰も私の答えを修正しませんでした。

接続クラスと、ページでそのクラスを使用するメソッドがあります。

DataConn.cs

public static OleDbConnection ConnectExcel()
{
    //Store the connection details as a string
    string connstr =
        String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties=Excel 12.0 Xml;HDR=YES");

    //Initialise the connection to the server using the connection string.
    OleDbConnection oledbConn = new OleDbConnection(connstr);

    //Open the connection, we do this here so we can instantly be able to use SQL commands in the code.
    oledbConn.Open();

    return oledbConn;
}

public static void DisconnectExcel()
{
    _oledbConn.Dispose();
    _oledbConn.Close();
}

そしてそれを呼び出すコード

protected void Page_Load(object sender, EventArgs e)
{
    // Connection String
    const string xlStr = "SELECT * FROM [Sheet2$]";

    // Create OleDbCommand object and select data from worksheet Food
    OleDbCommand cmd = new OleDbCommand(xlStr, DataConn.ConnectExcel());

    // Create new OleDbDataAdapter
    OleDbDataAdapter oleda = new OleDbDataAdapter();

    oleda.SelectCommand = cmd;

    // Create a DataSet which will hold the data extracted from the worksheet.
    DataSet ds = new DataSet();

    // Fill the DataSet from the data extracted from the worksheet.
    oleda.Fill(ds);

    // Bind the data to the GridView
    gridPricelist.DataSource = ds;
    gridPricelist.DataBind();
}

はい、私はまだ取得します:

System.Data.OleDb.OleDbException:インストール可能なISAMが見つかりませんでした。

誰か助けてもらえますか?

4

3 に答える 3

22

複数の拡張プロパティを使用する場合は、値トークンを引用符で囲む必要があります。引用符で囲まないと、ドライバーが接続文字列内の他の非拡張プロパティと区別する方法がありません。

...Extended Properties=""Excel 8.0;IMEX=1"""

接続文字列を変更する

String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""");

参照: インストール可能なISAMが見つかりませんでした

于 2012-07-19T13:58:15.967 に答える