[英]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.