从 Excel 文件中检索标量

发布于 2024-12-05 17:25:25 字数 313 浏览 1 评论 0原文

我需要使用从 Excel 工作表获取的标量填充字符串的一部分:string myStr = myStr + excelResponce(myStr) ;
但是 myStr 会不断更新,不需要将请求数据或字符串放入列表中。
我尝试(1)odbc适配器加载完整的excel文件和数据行select()来检索标量和(2)odbc open-query-close方法。两者都可以工作,但看起来效率低下:前者必须在资源限制下将整个 xls 加载到内存中,后者不适用于标量,并且它的数据集加载了单行数据。
如何连接简单结构数据?如何以最有效的方式检索最少的数据?谢谢大家。

I need to populate part of a string with a scalar obtained from an excel sheet: string myStr = myStr + excelResponce(myStr) ;
However myStr is continuously updating and there is no need to put either the request data or the string in a list.
I tried (1)odbc adapter to load the full excel file and datarows select() to retrieve the scalar and (2) odbc open-query-close method. Both work, but look inefficient: former has to load in memory the whole xls with resource limitation, latter is not meant for scalars and it suffers from having a dataset loaded with a single row of data.
How to connect to simple structure data ? How to retrieve minimal data in the most efficient way? Thank you all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

面如桃花 2024-12-12 17:25:25

您应该使用 ExecuteScalar 方法,而不是其他任何方法,这样您将加载精确的标量而不是数据集。

这是我刚刚从互联网上复制的一个示例,如果您在 Excel 中创建了一个名为 myRange1 的范围,假设该范围仅包含 1 个具有整数值的单元格,则以下是如何获取它:

using System;
using System.Windows.Forms;
using System.Data.OleDb; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string filename = "filename.xls";
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + @";Extended Properties=""Excel 8.0;HDR=1;IMEX=1""";

            string sql = "SELECT * FROM myRange1"; 

            using(var conn = new OleDbConnection(connString);
            using(var cmd = new OleDbCommand(sql, conn);
            {
                conn.Open();

                Int32 myReturnScalar = Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
    }
}

You should use the ExecuteScalar method, not anything else, so you will load the exact scalar and not a DataSet.

here an example I just copied from the Internet, if you have created a range called myRange1 in excel, assuming that contains only 1 cell with an integer value, here is how to get it:

using System;
using System.Windows.Forms;
using System.Data.OleDb; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string filename = "filename.xls";
            string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + @";Extended Properties=""Excel 8.0;HDR=1;IMEX=1""";

            string sql = "SELECT * FROM myRange1"; 

            using(var conn = new OleDbConnection(connString);
            using(var cmd = new OleDbCommand(sql, conn);
            {
                conn.Open();

                Int32 myReturnScalar = Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文