我有一个像这样的excel文件:
我有拖动TextBox(Fname,Lname),拖动按钮(搜索,插入)和一个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();
}
答案 0 :(得分: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;";
答案 1 :(得分:0)
使用更像LinqToExcel的结构(你也可以在NuGet中找到它),这非常容易使用并且在幕后使用ODBC可以解决错误或者至少缩小可能的错误。< / p>