【问题标题】:C# add-in Excel 2010 - Exception from HRESULT: 0x800A03ECC# 加载项 Excel 2010 - HRESULT 异常:0x800A03EC
【发布时间】:2017-02-07 16:17:05
【问题描述】:

我的应用有问题。几年前开发的。它是 MS Excel 2010 的加载项,它执行对 SQL 服务器数据库的调用并在 Worksheet 中形成一个表。我不得不对其进行修改以使其与 Azure 数据库(连接字符串)一起使用,但事实证明问题是比这更深一点。当我尝试运行一个应用程序时,它给出了 HRESULT: 0x800A03EC 异常,我不知道为什么。 已安装 MS Excel 2010。给出错误的代码:

public void insertData(string startDate, string endDate, string startTime, string endTime, string tickerSymbol,
        string RegId, string events, string userId, string PO, bool includePO, string markets)
    {

        try
        {

            //
            if (Globals.ExclAddIn.recordCount < 1000000)
            {
                string szSql = string.Format(@"EXEC sp_Get_Excel_TOQ_Report_Data_Mkt {0}, {1}, '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', {10}",
                startDate, endDate, startTime, endTime, tickerSymbol, RegId, events, userId, PO, markets, includeJPO);

                Workbook w = this.Application.ActiveWorkbook;
                Worksheet ws;
                if (w != null)
                {
                        ws = (Worksheet)w.Sheets.Add(missing,missing,missing,missing);
                        ws.Name = DateTime.Now.ToString("(RPT) yyyyMMdd HHmmss");
                    //}
                }
                else
                {
                    w = this.Application.Workbooks.Add(missing);
                    ws = (Worksheet) w.Worksheets.get_Item(1);
                }


                Range unfreezeRow = (Range)ws.Rows[10];
                unfreezeRow.Application.ActiveWindow.FreezePanes = false;

                ws.Rows.Delete();
                object misValue = System.Reflection.Missing.Value;
                Range range = ws.get_Range("A1:A9", misValue);
                MessageBox.Show(range.EntireRow.Address);

                //Check if the issue is in connection
                SqlConnection conn = new SqlConnection(selectedConnection);
                conn.Open();
                MessageBox.Show("Connection opened...");

                QueryTables xlQryTables = ws.QueryTables;
                IEnumerable<QueryTable> qt = xlQryTables.Cast<QueryTable>();
                foreach (QueryTable q in qt)
                {
                    q.Delete();
                }

                QueryTable xlQueryTable = (QueryTable)xlQryTables.Add(selectedConnection, range, szSql);
                xlQueryTable.RefreshStyle = XlCellInsertionMode.xlOverwriteCells;
                xlQueryTable.AfterRefresh += new RefreshEvents_AfterRefreshEventHandler(xlQueryTable_AfterRefresh);
                xlQueryTable.CommandType = XlCmdType.xlCmdSql;
                xlQueryTable.Refresh(true);

                assignReportHeader(ws);


            }
        }
        catch (Exception e)
        { 
            throw new Exception(e.Message);
        }
    }

我遇到错误的地方是:

QueryTable xlQueryTable = (QueryTable)xlQryTables.Add(selectedConnection, range, szSql);

连接字符串有效...我可以看到范围也被选中。请帮忙。

【问题讨论】:

标签: c# sql-server excel excel-addins


【解决方案1】:

我不能发表评论,因为我会这样问。 你能写出你的显式连接字符串吗?我认为问题出在连接字符串上,也许你忘记了一些分号或类似的东西。

【讨论】:

  • 我从 xml 文件中获取连接字符串:Password=testpwd123;User ID=testusr@devdb001;Initial Catalog=DEV;Data Source=tcp:devdb001.database.windows.net; 我可以看到连接已打开。
  • 但是,你能检查一下连接的合法性吗?
  • 你这是什么意思?我实现了这段代码来验证://检查问题是否在连接中 SqlConnection conn = new SqlConnection(selectedConnection); conn.Open(); MessageBox.Show("连接打开...");它工作正常,连接打开。
  • 不,我的参考不适用于 sql 连接字符串 我的参考来自您的 qestion 部分:我遇到错误的地方是:QueryTable xlQueryTable = (QueryTable)xlQryTables.Add(selectedConnection, range, szSql);
  • 我不知道你有没有看到这个,但无论如何我会放链接并阅读第一个答案。 link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2011-03-02
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多