将c#中的字符串传递给静态语句

Mar*_*hal 3 c# winforms

我试图通过让程序连接到服务器来在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");
}
Run Code Online (Sandbox Code Playgroud)
ERROR - A field initializer cannot reference the non-static field, method, or property 
Run Code Online (Sandbox Code Playgroud)

如果我尝试将"我们"或"过时"设为静态,我无法将主要课程的信息传递给此课程.如果有人能指出我做错了什么,我会感激不尽,因为我不是C#的专家,我必须承认.谢谢.

Ree*_*sey 8

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

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

这允许您使用其他变量(状态)来创建所需的值.

我还建议将字符串值更改为属性,使用构造函数初始化属性,并使用更好的名称.另一种方法是让用户名和密码成为方法的参数,即:

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");
}
Run Code Online (Sandbox Code Playgroud)

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