简体   繁体   English

如何通过ASP.NET中的ODBC连接将查询插入Excel?

[英]How to insert query to Excel by ODBC connection in ASP.NET?

I have an excel file like this: 我有一个像这样的excel文件:

在此处输入图片说明

I have tow TextBox(Fname,Lname) , tow Button(Search,Insert) and one GridView to show result. 我有两个TextBox(Fname,Lname),两个Button(Search,Insert)和一个GridView来显示结果。 Search button work fine but Insert button not work. 搜索按钮工作正常,但插入按钮无效。

Error in insert Button is: 插入按钮错误为:

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

ASPX: 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>

Code behind: 后面的代码:

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();
}

Per http://support.microsoft.com/kb/316475 每个http://support.microsoft.com/kb/316475

make sure you add "ReadOnly=0" 确保添加“ ReadOnly = 0”

string conStr = @"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"+
@"DBQ=|DataDirectory|\q.xlsx;ReadOnly=0;";

使用更结构化的东西,例如LinqToExcel (您也可以在NuGet中找到它),它确实易于使用,并且在幕后使用ODBC可以解决错误或至少缩小可能的错误的范围。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM