从其他类访问Form类

时间:2015-09-24 12:27:00

标签: c# winforms

我已经在这一天苦苦挣扎了一天多了。似乎很多人都问过类似的事情,但他们通常希望做的事情比我需要的更先进。我知道它应该是什么样的(我认为),但是实际上正确地实现了它 - 所以在这里:

我有一个表单应用程序可以执行一些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不是,我无法理解为什么以及我应该做些什么来使它工作 - 我一直在努力与它有一段时间并且有采用不同的解决方法,通常无法获得良好的代码。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

几乎正确:您需要类名 mportForm,而不是它的实例( i mportForm)来访问静态属性:

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(ImportForm.sqlConnection);

答案 1 :(得分:0)

如果在ImportForm中创建了CsvImportIntoSql实例,那么最好的选择是注入sqlConnection,或者如果在创建CsvImportIntoSql实例后它可能会更改,那么就会向CsvImportIntoSql实例注入一个引用。

答案 2 :(得分:0)

如果我理解,您正在尝试使用在另一个类中定义的相同sqlConnection变量。但是看起来你已经将这个变量声明为静态,这应该有助于从另一个类引用它:

尝试替换

x+x = 2x

使用:

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection);

这应该有效。但是,在多个实例中使用相同的连接并不总是一个好习惯。相反,您可以为每个作业初始化新连接。