这是我的语法,但它没有被传递给我的连接字符串,它被省略,当然由于数据库不存在而导致错误。有可能这样做吗?
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
}
}
}
}
答案 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。
此外,我认为你在字符串末尾有一个额外的引用。
当您设置连接字符串时,如果您仍然更改了其他属性,则不会动态更新。