C# 调用类的新实例时,如何在类中填充公共变量?
我有以下课程:C# 调用类的新实例时,如何在类中填充公共变量?,c#,oop,C#,Oop,我有以下课程: public class Engin { public string ConnictionString; public string database; public DataTable Selecting_DT(string TableName) { DataTable functionReturnValue = null; SqlConnection sqlCon = new SqlConnection(Conni
public class Engin
{
public string ConnictionString;
public string database;
public DataTable Selecting_DT(string TableName)
{
DataTable functionReturnValue = null;
SqlConnection sqlCon = new SqlConnection(ConnictionString);
try
{
sqlCon.Open();
SqlCommand cmd = new SqlCommand("select * from [" + TableName + "]", sqlCon);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("MyTable");
da.Fill(dt);
functionReturnValue = dt;
cmd.Dispose();
}
catch (Exception)
{
sqlCon.Close();
return functionReturnValue;
}
sqlCon.Close();
return functionReturnValue;
}
}
当我调用这个类时,我写:
public Engin myclass = new Engin();
private void Form1_Load(object sender, EventArgs e)
{
myclass.ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
DataTable dt = myclass.Selecting_DT("Customer");
}
问题是-如果我有1000个表单,我需要调用所有这些表单中的myclass
如何缩短代码,以便在不设置ConnectionString的情况下调用myclass的新实例1000次?在类的构造函数中执行此操作:
public Engin()
{
this.ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
}
在类的构造函数中执行此操作:
public Engin()
{
this.ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
}
您可以在Engine Constructor中设置该属性
public Engin()
{
ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
}
您可以在Engine Constructor中设置该属性
public Engin()
{
ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
}
更改连接字符串声明行:
public string ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
尽管这是修复它的最短方法,但建议将其发布到app.config
文件中:
<configuration>
<connectionStrings>
<add name="Engin" connectionString="ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";"/>
</connectionStrings>
</configuration>
这将允许您配置数据库,而无需重建应用程序。更改连接字符串声明行:
public string ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
尽管这是修复它的最短方法,但建议将其发布到app.config
文件中:
<configuration>
<connectionStrings>
<add name="Engin" connectionString="ConnictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";"/>
</connectionStrings>
</configuration>
这将允许您配置数据库,而无需重建应用程序。由于连接字符串是常量,您可以在选择\u DT方法时将其放入字符串中。
我会添加此方法的一个重载,它可以获取连接字符串作为参数,以防另一个窗体希望使用另一个连接字符串而不是您类中硬编码的连接字符串。由于连接字符串是常量,您可以将其放入
选择\u DT
方法中的字符串中。我想添加这个方法的重载,它可以获取连接字符串作为参数,以防另一个窗体想要使用另一个连接字符串,而不是您的类中硬编码的连接字符串。也可以这样做
public Engin myclass = new Engin() { connictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True" };
也可以这样做
public Engin myclass = new Engin() { connictionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True" };
您可以对其进行硬编码:
public class Engin
{
public string ConnictionString = "Data Source=...";
public string database;
// [cut], usage:
public Engin myclass = new Engin();
private void Form1_Load(object sender, EventArgs e)
{
// conn string already set
DataTable dt = myclass.Selecting_DT("Customer");
}
或者将其放入构造函数中(如果只有一个构造函数,则结果与上面相同)
或者,您可以编写一个初始值设定项:
public class Engin
{
public string ConnictionString;
public string database;
public void InitConnString()
{
this.ConnictionString = "Data Source=...";
}
// [cut], usage:
public Engin myclass = new Engin();
private void Form1_Load(object sender, EventArgs e)
{
myclass.InitConnString();
DataTable dt = myclass.Selecting_DT("Customer");
}
确实有很多选择。您可以硬编码:
public class Engin
{
public string ConnictionString = "Data Source=...";
public string database;
// [cut], usage:
public Engin myclass = new Engin();
private void Form1_Load(object sender, EventArgs e)
{
// conn string already set
DataTable dt = myclass.Selecting_DT("Customer");
}
或者将其放入构造函数中(如果只有一个构造函数,则结果与上面相同)
或者,您可以编写一个初始值设定项:
public class Engin
{
public string ConnictionString;
public string database;
public void InitConnString()
{
this.ConnictionString = "Data Source=...";
}
// [cut], usage:
public Engin myclass = new Engin();
private void Form1_Load(object sender, EventArgs e)
{
myclass.InitConnString();
DataTable dt = myclass.Selecting_DT("Customer");
}
确实有很多选项。
< p>您可以考虑用<强> >使用< /强>语句来重新编写方法/类,以进行正确的对象清理,而不是使用Test.catch……/P>public class Engine
{
private const string _connectionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
public Engine() {
}
public DataTable Selecting_DT(string tableName) {
using(var conn = new SqlConnection(_connectionString)) {
conn.Open();
using(var cmd = new SqlCommand("select * from [" + TableName + "]", conn)) {
var da = new SqlDataAdapter(cmd);
var dt = new DataTable("MyTable");
da.Fill(dt);
return dt;
}
}
}
}
您可能想考虑用<强> >使用< /强>语句来重新编写方法/类,以进行正确的对象清理,而不是使用Test.catch……/P>
public class Engine
{
private const string _connectionString = "Data Source=.;Initial Catalog=MY_Table;Integrated Security=True";
public Engine() {
}
public DataTable Selecting_DT(string tableName) {
using(var conn = new SqlConnection(_connectionString)) {
conn.Open();
using(var cmd = new SqlCommand("select * from [" + TableName + "]", conn)) {
var da = new SqlDataAdapter(cmd);
var dt = new DataTable("MyTable");
da.Fill(dt);
return dt;
}
}
}
}
首先,我建议您将connectionstring存储在配置文件中,而不是在代码中硬编码,然后为connectionstring设置一个静态变量,使其位于类级别而不是对象级别 如果将其定义为静态,则只调用一次
public static string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DBConnectionString"];
首先,我建议您将connectionstring存储在配置文件中,而不是在代码中硬编码,然后为connectionstring设置一个静态变量,使其位于类级别而不是对象级别 如果将其定义为静态,则只调用一次
public static string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["DBConnectionString"];
我不确定我是否理解正确,但你不只是在构造函数中传递字符串,让你的类将字符串分配给数据源吗?我不确定我是否理解正确,但是,您不只是将字符串传递到构造函数中,并让您的类将该字符串分配给数据源吗?他仍然需要为每个声明编写该字符串。他仍然需要为每个声明编写该字符串。对
using
语句的调用很好。对using
语句的调用很好。