簡體   English   中英

如何從Excel工作表獲取特定數據到文本框

[英]How to get specific data from excel sheet into textboxes

我想使用搜索查詢將特定數據從Excel工作表獲取到winforms文本框中。 類似於“從[Sheet1]中搜索*,其中職員編號= 1234”

我嘗試了這段代碼,但是沒有用。 每當我說“連接未正確初始化”時,我都會收到一個異常。

try{
OleDbConnection con = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;data source=Test.xls;Extended Properties=Excel 8.0;");
           con.Open();
           OleDbCommand oleDbCommand = new OleDbCommand("SELECT * FROM [Sheet1] where Staff Number=1234");

              OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader();


                   TxtDateOfBirth.Text = oleDbDataReader.GetString(1);
                   TxtName.Text=oleDbDataReader.GetString(2);
.
.
.
.
      }
           catch(Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }

這是一種簡單的表單,用戶可以在相關的文本框中輸入人員編號並獲取人員的詳細信息。 我的大多數搜索結果為我提供了將數據顯示到datagridview中的解決方案,但是我的問題有點不同,我知道我必須使用數據讀取器並執行它,但是不知道為什么會出現此問題。

任何指南將非常有幫助。

在我看來,您的代碼中存在一些問題:

1-您應該在連接中放置Excel文件的完整地址,而不是“ test.xls”。

2-命令中的“ Staff”和“ Number”之間有一個空格。 如果列名是“ StaffNumber”,則不應有任何空格。 我建議您先測試不帶where子句的命令。

稍微調整了代碼。

改進措施

更改了連接字符串,添加了HDR=Yes; 表示第一行包含列名, IMEX=1; 它告訴驅動程序始終以文本形式讀取“混合”(數字,日期,字符串等)數據列。 這些通常在與員工數據庫一起工作時很有用。

問題

添加了變量,以使其更整潔且具有xls db文件的完整路徑

如上述其他幫助用戶在注釋中所建議的那樣,在Sheet1之后添加了一個$ ,並且還用[]包裝了[Staff Number]

添加了oleDbDataReader.Read()以讀取結果,因為上面的代碼中也缺少此內容。

下面的示例代碼對我有用。

try 
{           
    var xlsDbPath= "C:\\Temp\\Test.xls"; //<-- Full name of path
    var connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsDbPath+ ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
    var query = "SELECT * FROM [Sheet1$] WHERE [Staff Number] = 1234";  //<-- Add $ after Sheet1 and fix 'Staff Number'?

    using (var con = new OleDbConnection(connStr))
    {
        con.Open();
        using (var oleDbCommand = new OleDbCommand(query, con))
        {
            using (var oleDbDataReader = oleDbCommand.ExecuteReader())
            {
                while (oleDbDataReader.Read())  //Read through results
                {
                     TxtDateOfBirth.Text = oleDbDataReader.GetString(1);
                     TxtName.Text = oleDbDataReader.GetString(2);
                     //...  //Remember if value is not string you will get error
                     //...  //so if not string use .GetValue(1).ToString();
                } 
            }
        }
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM