“First class” означает, что можно воздействовать на них обычным способом. Большинство времен, это просто означает, что можно передать этих первоклассных граждан как аргументы функциям или возвратить их из функций.
Это самоочевидно для объектов, но не всегда так очевидно для функций, или даже классов:
void f(int n) { return n * 2; }
void g(Action<int> a, int n) { return a(n); }
// Now call g and pass f:
g(f, 10); // = 20
Это - пример в C#, где функции на самом деле не первоклассные объекты. Вышеупомянутый код поэтому использует маленькое обходное решение (а именно, универсальный делегат звонил Action<>
) передать функцию как аргумент. Другие языки, такие как Ruby, позволяют рассматривать даже классы и кодируют блоки как нормальные переменные (или в случае Ruby, констант).
Я не уверен, что понимаю, что вы хотите.
Если у вас уже есть строка подключения, и вы пытаетесь извлечь из нее имя сервера для использования в другом месте, вы можете отменить -engineer это так:
var parser = new SqlConnectionStringBuilder(connectionString);
var serverName = parser.DataSource;
Если вы создаете строку подключения в первый раз, то:
(локальный)
в качестве имени сервера. Если у SQL Server есть имя экземпляра, укажите его следующим образом: (local) \ myinstancename
. Вы не можете просто выполнить SELECT @@ SERVERNAME для этого соединения?
Находится ли сервер на локальном компьютере?
Если это так, установите имя сервера на localhost
.
Если нет, используйте SqlDataSourceEnumerator .
Кроме того, вместо построения строки подключения с использованием String.Format
вы должны использовать SqlConnectionStringBuilder . Это будет обрабатывать значения с точкой с запятой.
Например:
var builder = new SqlConnectionStringBuilder();
builder.UserID = dirDBinfo.UserName;
builder.Password = dirDBinfo.Password;
builder.Server= "localhost";
builder.UserID = dirDBinfo.UserName;
builder["Trusted_Connection"] = "no";
builder.Database = "TestDB"
builder.ConnectTimeout = dirDBinfo.TimeOut;