簡體   English   中英

從其他類訪問Form類

[英]Accessing Form class from other class

我已經為此苦了整整一天。 看來很多人都在問類似的事情,但是他們通常想做一些比我需要的事更先進的事。 我知道了它的外觀(我認為),但實際上卻很難正確實施它-因此,事情就這樣了:

我有一個執行一些Odbc,Sql,Csv導入/導出的表單應用程序。

我的主要類是ImportForm類,它包含所有按鈕,控件,還可以在每個構造函數中創建SQL和ODBC連接等。

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        ImportForm importForm = new ImportForm();
        Application.Run(importForm);
    }

    public partial class ImportForm : Form

    public static SqlConnection sqlConnection = new SqlConnection(ConstantValues.SqlConnectionString);
    public static OdbcConnection odbcConnection = new OdbcConnection(ConstantValues.OdbcConnectionString);

    (...)

我現在還有其他幾類可以做不同的事情。 例如,一次將CSV文件導入SQL Server。 它通過SqlBulk基於ImportForm類中定義的SQL連接來完成此操作:

internal class CsvImportIntoSql
    SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection);

但是,這將返回語法錯誤“名稱在當前上下文中不存在”

我試過了:

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(importForm.sqlConnection);

但它不起作用,類ImportForm可在上下文中使用,但其定義的實例importForm不可用,我不明白為什么以及我應該怎么做才能使其工作-我一直在努力中,不得不采用其他方法變通方法通常無法生成良好的代碼。

任何幫助,將不勝感激。

幾乎正確:您需要類名I mportForm而不是它的實例( i mportForm)來訪問靜態屬性:

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(ImportForm.sqlConnection);

如果在ImportForm中創建了CsvImportIntoSql實例,那么最好的選擇是注入sqlConnection,或者如果在創建CsvImportIntoSql實例之后它可能會改變,則向CsvImportIntoSql實例本身注入一個引用。

據我了解,您正在嘗試使用在另一個類中定義的相同sqlConnection變量。 但似乎您已將此變量聲明為靜態變量,這在從另一個類引用它時會有所幫助:

嘗試更換

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection);

與:

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(ImportForm.sqlConnection);

這應該工作。 但是,在多個實例中使用同一連接並不總是一個好習慣。 相反,您可以為每個作業初始化一個新的連接。

暫無
暫無

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

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