1

我正在研究三层架构。我需要通过业务层从 UI 中传递数据访问层中的服务器名称。为了传递值,我正在使用属性,并且我成功地在我的数据层中获取了值。但是当我尝试连接字符串来为我的数据库连接生成数据源时,它会传递空值。

我的代码:

public class dataLayer: IDisposable
{
    private string serverName;
    private string name;
    private string ceConnString;

    public string ServerName 
    {
        get { return serverName; }
        set { serverName = value; }
    }

    public dataLayer()
    {
        //First Try - Using Simple Concatination
        name = @"\\" + ServerName + @"\foldername\Database.sdf;";
        //result - name = \\\\\\foldername\Database.sdf

        //Second Try - Using String Builder
        StringBuilder build = new StringBuilder();
        build.Append("\\\\");
        build.Append(ServerName);
        build.Append("\\foldername\\Database.sdf;");
        string namebuilder = build.ToString();
        //result - namebuilder = \\\\\\foldername\Database.sdf

        //Third Try - Using Path
        string line = Path.Combine("\\\\", ServerName, \\foldername\\Database.sdf;");
        //result - line = \\\\\\foldername\Database.sdf

        ceConnString = "data source=" + name;
    }

我希望输出为\\server name\foldername\Database.sdf

4

2 回答 2

2

当您调用类的构造函数时,实例属性 ServerName 仍为其默认值(null),您需要以这种方式更改构造函数

public dataLayer(string serverName)
{
    this.ServerName = serverName;

    name = @"\\" + ServerName + @"\foldername\Database.sdf;";
    ....

}

并以这种方式叫你上课

dataLayer dl = new dataLayer(yourServerName);
于 2013-08-17T10:14:22.520 回答
0

尽管您可能想为此使用 string.Format ,但我认为使用 Path 类构建路径更干净。您几乎已经使用它了,但是您得到了额外的 \'es,因为您没想到 Path.Combine 在段之间插入了额外的 \'es。试试这个(在单元测试中):

var unc = Path.Combine(@"\\", ServerName, @"foldername\Database.sdf");

Assert.AreEqual(@"\\MyHost\foldername\Database.sdf", unc);
于 2013-08-17T10:25:17.843 回答