你能用这种方式使用变量吗?

时间:2015-04-26 23:36:37

标签: c# variables

这是我的语法,但它没有被传递给我的连接字符串,它被省略,当然由于数据库不存在而导致错误。有可能这样做吗?

namespace bottomsup
{
class onetwothree
{
    private static string databaseName = null;
    private static string ServerConnectionString = "Data Source=BradJohnson;Initial Catalog=" + databaseName + "DB;User ID = pmartin;Integrated Security=True;MultipleActiveResultSets=True"";

    Form1()
    {
        InitializeComponents();
    }

    private void ConnectToServerClick()
    {
        databaseName = textbox1.Text;
        using (SqlConnection connection = new SqlConnection(ServerConnectionString))
        {
            connection.Open();
            //more stuff
        }
    }
}
}

3 个答案:

答案 0 :(得分:3)

不,如果您稍后更改databaseName的值,则不会自动更改ServerConnectionString的值。

您必须自己重新设置ServerConnectionString的值。

ServerConnectionString =
    string.Format("Data Source=BradJohnson;Initial Catalog={0}DB;User ID = pmartin;Integrated Security=True;MultipleActiveResultSets=True", textbox1.Text);

我会避免使用静态变量,因为如果你尝试重用它会导致bug,特别是如果你在多个地方覆盖它。一个地方设置它,然后设置另一个地方,现在一个或另一个在尝试检索时会抓取一个不正确的值。

也许是这样的,你总是需要传递数据库名称:

private static string GetServerConnectionString(string databaseName)
{
    return string.Format("Data Source=BradJohnson;Initial Catalog={0}DB;User ID = pmartin;Integrated Security=True;MultipleActiveResultSets=True", databaseName);
}

将其与现有代码一起使用:

using (var connection = new SqlConnection(GetServerConnectionString(textbox1.Text)))
{
    connection.Open();
    //more stuff
}

答案 1 :(得分:3)

我怀疑在这种情况下静态是否合理。

尽管如此,它不适用于变量private static string ServerConnectionString { get { return "Data Source=BradJohnson;Initial Catalog=" + databaseName + "DB;User ID = pmartin;Integrated Security=True;MultipleActiveResultSets=True"; } } ,但您可以改为使用属性:

    shared_ptr<B> b = shared_ptr<B>(new B);
    container.push_back(b);
    auto it = container.begin();
    shared_ptr<B> aB = static_pointer_cast<B>(*it);
    aB->showb();

答案 2 :(得分:2)

通常当您尝试将null值添加到具有值的某个值时,它将会崩溃。在DB Name中,您应该使用String.Empty而不是null。

此外,我认为你在字符串末尾有一个额外的引用。

当您设置连接字符串时,如果您仍然更改了其他属性,则不会动态更新。