3

我试图通过让我的程序连接到服务器来在 c# 中创建一个 SQL 数据库。我在创建登录屏幕时遇到问题。问题是为了创建一个登录屏幕。我正在尝试将 2 个字符串传递给连接类,但由于语句是静态的,因此无法这样做?

public class sqlconnect
{
    public String us;
    public String pas;

    public SqlConnection myConnection = new SqlConnection("user id=" + (us) + ";" +
                                           "password=" + (pas) + ";server=PANDORA;" +
                                           "Trusted_Connection=yes;" +
                                           "database=NHS; " +
                                           "connection timeout=30");
}

ERROR - A field initializer cannot reference the non-static field, method, or property 

如果我尝试将“我们”或“pas”设为静态,我将无法将信息从我的主类传递给这个类。如果有人能指出我做错了什么,我将不胜感激,因为我不是 C# 专家,我必须承认。谢谢你。

4

2 回答 2

8

您不能在字段初始值设定项中使用变量。这里一个不错的选择是创建myConnection一个属性或(在这种情况下更好)一个方法:

public SqlConnection CreateConnection()
{
     return new SqlConnection("user id=" + us + ";" +
                                       "password=" + pas + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");
}

这允许您使用其他变量(状态)来创建您想要的值。

我还建议将您的字符串值更改为属性,使用构造函数来初始化它们的属性,并使用更好的名称。另一种选择是将用户名和密码作为方法的参数,即:

public SqlConnection CreateConnection(string username, string password)
{
     return new SqlConnection("user id=" + username + ";" +
                                       "password=" + password + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");
}

这将消除将这些作为状态存储在您的类中的需要(除非它们也被其他例程使用)。

于 2012-10-16T21:16:21.647 回答
1
// property
public SqlConnection myConnection { get; set; }

// method
public SqlConnection GetSqlConnection()
{
     if (myConnection == null) 
       myConnection = new SqlConnection("user id=" + us + ";" +
                                       "password=" + pas + ";server=PANDORA;" +
                                       "Trusted_Connection=yes;" +
                                       "database=NHS; " +
                                       "connection timeout=30");

     return myConnection;
}
于 2012-10-16T21:22:48.147 回答