我已经在这一天苦苦挣扎了一天多了。似乎很多人都问过类似的事情,但他们通常希望做的事情比我需要的更先进。我知道它应该是什么样的(我认为),但是实际上正确地实现了它 - 所以在这里:
我有一个表单应用程序可以执行一些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不是,我无法理解为什么以及我应该做些什么来使它工作 - 我一直在努力与它有一段时间并且有采用不同的解决方法,通常无法获得良好的代码。
任何帮助都将不胜感激。
答案 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);
这应该有效。但是,在多个实例中使用相同的连接并不总是一个好习惯。相反,您可以为每个作业初始化新连接。