SQL Server 목록 (10-12)이 실행 중인지 확인하기 위해 5 분마다 실행되는 단일 루틴을 개발해야합니다.
각 서버에서 간단한 쿼리를 얻을 수 있지만 이는 이미 만들어진 SP를 사용하더라도 모든 서버에서 테이블, 뷰 또는 저장 프로 시저를 만들어야 함을 의미합니다. 각 서버에 등록 된 사용자가 있어야합니다. 서버도. 서버가 동일한 물리적 위치에 있지 않으므로 이러한 요구 사항을 충족하는 것은 복잡한 작업입니다. C # one SQL Server에서 단순히 “ping”하는 방법이 있습니까?
미리 감사드립니다!
답변
실행 SELECT 1
하고 ExecuteScalar가 1을 반환하는지 확인합니다.
답변
서버 연결이 중지되거나 일시 중지되었을 때 EF에 어려움이 있었고 같은 질문을 제기했습니다. 따라서 위의 답변에 대한 완전성을 위해 여기에 코드가 있습니다.
/// <summary>
/// Test that the server is connected
/// </summary>
/// <param name="connectionString">The connection string</param>
/// <returns>true if the connection is opened</returns>
private static bool IsServerConnected(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
try
{
connection.Open();
return true;
}
catch (SqlException)
{
return false;
}
}
}
답변
GitHub에서 다음 프로젝트를 참조하십시오. https://github.com/ghuntley/csharp-mssql-connectivity-tester
try
{
Console.WriteLine("Connecting to: {0}", AppConfig.ConnectionString);
using (var connection = new SqlConnection(AppConfig.ConnectionString))
{
var query = "select 1";
Console.WriteLine("Executing: {0}", query);
var command = new SqlCommand(query, connection);
connection.Open();
Console.WriteLine("SQL Connection successful.");
command.ExecuteScalar();
Console.WriteLine("SQL Query execution successful.");
}
}
catch (Exception ex)
{
Console.WriteLine("Failure: {0}", ex.Message);
}
답변
데이터베이스에 대한 연결을 설정하지 않겠습니까? 데이터베이스가 작동하지 않으면 연결을 설정할 수 없습니다.
답변
포트 1433 (기본 포트)에서 열린 리스너를 찾으십시오. 거기에서 tcp 연결을 만든 후 응답을 받으면 서버가 작동 중일 수 있습니다.
답변
Joel Coehorn이 제안한 내용에 대해 tcping이라는 유틸리티를 이미 사용해 보셨습니까 ? 나는 이것이 당신이 프로그래밍 방식으로하지 않는 것임을 알고 있습니다. 지정된 시간 간격마다 ping을 수행 할 수있는 독립 실행 형 실행 파일입니다. 그래도 C #에는 없습니다. 또한 .. 대상 컴퓨터에 방화벽이있는 경우 이것이 작동하는지 모르겠습니다 ..hmmm ..
[저는이 사이트에 익숙하지 않아 실수로 댓글로 추가했습니다. 이제 답변으로 추가했습니다. 여기에 중복 된 댓글 (댓글 및 답변)이 있으므로 여기에서이 작업을 수행 할 수 있는지 알려주세요. 여기에서는 댓글을 삭제할 수 없습니다.]
답변
public static class SqlConnectionExtension
{
#region Public Methods
public static bool ExIsOpen(
this SqlConnection connection, MessageString errorMsg = null)
{
if (connection == null) { return false; }
if (connection.State == ConnectionState.Open) { return true; }
try
{
connection.Open();
return true;
}
catch (Exception ex) { errorMsg?.Append(ex.ToString()); }
return false;
}
public static bool ExIsReady(
this SqlConnection connction, MessageString errorMsg = null)
{
if (connction.ExIsOpen(errorMsg) == false) { return false; }
try
{
using (var command = new SqlCommand("select 1", connction))
{ return ((int)command.ExecuteScalar()) == 1; }
}
catch (Exception ex) { errorMsg?.Append(ex.ToString()); }
return false;
}
#endregion Public Methods
}
public class MessageString : IDisposable
{
#region Protected Fields
protected StringBuilder _messageBuilder = new StringBuilder();
#endregion Protected Fields
#region Public Constructors
public MessageString()
{
}
public MessageString(int capacity)
{
_messageBuilder.Capacity = capacity;
}
public MessageString(string value)
{
_messageBuilder.Append(value);
}
#endregion Public Constructors
#region Public Properties
public int Length {
get { return _messageBuilder.Length; }
set { _messageBuilder.Length = value; }
}
public int MaxCapacity {
get { return _messageBuilder.MaxCapacity; }
}
#endregion Public Properties
#region Public Methods
public static implicit operator string(MessageString ms)
{
return ms.ToString();
}
public static MessageString operator +(MessageString ms1, MessageString ms2)
{
MessageString ms = new MessageString(ms1.Length + ms2.Length);
ms.Append(ms1.ToString());
ms.Append(ms2.ToString());
return ms;
}
public MessageString Append<T>(T value) where T : IConvertible
{
_messageBuilder.Append(value);
return this;
}
public MessageString Append(string value)
{
return Append<string>(value);
}
public MessageString Append(MessageString ms)
{
return Append(ms.ToString());
}
public MessageString AppendFormat(string format, params object[] args)
{
_messageBuilder.AppendFormat(CultureInfo.InvariantCulture, format, args);
return this;
}
public MessageString AppendLine()
{
_messageBuilder.AppendLine();
return this;
}
public MessageString AppendLine(string value)
{
_messageBuilder.AppendLine(value);
return this;
}
public MessageString AppendLine(MessageString ms)
{
_messageBuilder.AppendLine(ms.ToString());
return this;
}
public MessageString AppendLine<T>(T value) where T : IConvertible
{
Append<T>(value);
AppendLine();
return this;
}
public MessageString Clear()
{
_messageBuilder.Clear();
return this;
}
public void Dispose()
{
_messageBuilder.Clear();
_messageBuilder = null;
}
public int EnsureCapacity(int capacity)
{
return _messageBuilder.EnsureCapacity(capacity);
}
public bool Equals(MessageString ms)
{
return Equals(ms.ToString());
}
public bool Equals(StringBuilder sb)
{
return _messageBuilder.Equals(sb);
}
public bool Equals(string value)
{
return Equals(new StringBuilder(value));
}
public MessageString Insert<T>(int index, T value)
{
_messageBuilder.Insert(index, value);
return this;
}
public MessageString Remove(int startIndex, int length)
{
_messageBuilder.Remove(startIndex, length);
return this;
}
public MessageString Replace(char oldChar, char newChar)
{
_messageBuilder.Replace(oldChar, newChar);
return this;
}
public MessageString Replace(string oldValue, string newValue)
{
_messageBuilder.Replace(oldValue, newValue);
return this;
}
public MessageString Replace(char oldChar, char newChar, int startIndex, int count)
{
_messageBuilder.Replace(oldChar, newChar, startIndex, count);
return this;
}
public MessageString Replace(string oldValue, string newValue, int startIndex, int count)
{
_messageBuilder.Replace(oldValue, newValue, startIndex, count);
return this;
}
public override string ToString()
{
return _messageBuilder.ToString();
}
public string ToString(int startIndex, int length)
{
return _messageBuilder.ToString(startIndex, length);
}
#endregion Public Methods
}