2

次のようなExcelファイルがあります。

ここに画像の説明を入力

結果を表示するために、2つの TextBox(Fname,Lname) 、2つの Button(Search,Insert) 、および1つの GridView があります。検索ボタンは正常に機能しますが、挿入ボタンは機能しません。

挿入ボタンのエラー:

ERROR [HY000] [Microsoft][ODBC Excel Driver] Operation must use an updateable query.

ASPX:

Fname:<asp:TextBox ID="txtFname" runat="server"></asp:TextBox><br />
Lname:<asp:TextBox ID="txtLname" runat="server"></asp:TextBox><br />
<asp:Button ID="cmdSearch" runat="server" onclick="cmdSearch_Click" Text="Search" />
<asp:Button ID="cmdInsert" runat="server" onclick="cmdInsert_Click" Text="Insert" /><br />
<asp:GridView ID="GridView1" runat="server"></asp:GridView>

コードビハインド:

string conStr = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"+
    @"DBQ=|DataDirectory|\q.xlsx;";
protected void cmdInsert_Click(object sender, EventArgs e)
{
    OdbcConnection con = new OdbcConnection(conStr);
    con.Open();
    string query = "insert into [Sheet1$] (Fname,Lname) values (?,?)";
    OdbcCommand cmd = new OdbcCommand(query, con);
    cmd.Parameters.AddWithValue("?",txtFname.Text);
    cmd.Parameters.AddWithValue("?", txtLname .Text);
    cmd.ExecuteNonQuery();// has error
    con.Close();
}
protected void cmdSearch_Click(object sender, EventArgs e)
{
    OdbcConnection con = new OdbcConnection(conStr);
    con.Open();
    string query = "";
    query = "select * from [Sheet1$] where Fname=? or Lname=?";
    OdbcCommand cmd = new OdbcCommand(query, con);
    cmd.Parameters.AddWithValue("?", txtFname.Text);
    cmd.Parameters.AddWithValue("?", txtLname.Text);
    GridView1.DataSource = cmd.ExecuteReader();
    GridView1.DataBind();
    con.Close();
}
4

2 に答える 2

6

http://support.microsoft.com/kb/316475ごと

「ReadOnly = 0」を必ず追加してください

string conStr = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"+
@"DBQ=|DataDirectory|\q.xlsx;ReadOnly=0;";
于 2013-09-12T15:02:14.980 に答える
0

LinqToExcel (NuGet にもあります) のようなより構造化されたものを使用すると、非常に使いやすく、バックグラウンドで ODBC を使用することで、エラーを解決するか、少なくとも起こりうる間違いを絞り込むことができます。

于 2013-09-12T15:04:27.763 に答える