/// <summary>
/// 数据库连接操作,可替换为你自己的程序
/// </summary>
/// <param name="ConnectionString">连接字符串</param>
/// <returns></returns>
private static bool TestConnection(string ConnectionString)
{
bool result = true;
try
{
SqlConnection m_myConnection = new SqlConnection(ConnectionString);
m_myConnection.Open();
//数据库操作......
m_myConnection.Close();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
result = false;
}
return result;
}
#region 采用Socket方式,测试服务器连接
/// <summary>
/// 采用Socket方式,测试服务器连接
/// </summary>
/// <param name="host">服务器主机名或IP</param>
/// <param name="port">端口号</param>
/// <param name="millisecondsTimeout">等待时间:毫秒</param>
/// <returns></returns>
public static bool TestConnection(string host, int port, int millisecondsTimeout)
{
TcpClient client = new TcpClient();
try
{
var ar = client.BeginConnect(host, port, null, null);
ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
return client.Connected;
}
catch (Exception e)
{
throw e;
}
finally
{
client.Close();
}
}
#endregion
private void btnSocket_Click(object sender, EventArgs e)
{
string strCon = "Data Source=;Initial Catalog=;User ID=;password=";
string[] s=strCon.Split(';');
s = s[0].Split('=');
//获取IP
string strIP =s[1];
//发送数据,判断是否连接到指定ip
if (TestConnection(strIP , 1433, 500))
{
//连接成功
MessageBox.Show("Socket Link Succeed","连接服务器");
// 数据库操作,我这里用了连接测试。可根据你的系统自行修改
if (TestConnection(strCon))
MessageBox.Show("Sql Link Succeed","连接数据库");
else
MessageBox.Show("Sql Link Failed", "连接数据库");
}
else
MessageBox.Show("Socket Link Failed","连接服务器");
}
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=)));User Id=;Password=
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Sockets;
using System.Text;
namespace ZT_WhiteList_GuiZhouShiFan
{
public class TestConnect
{
/// <summary>
/// 使用socket方式,测试服务器连接
/// </summary>
/// <param name="host">IP地址</param>
/// <param name="port">端口号</param>
/// <param name="millisecondsTimeout">等待时间:毫秒</param>
/// <returns></returns>
public static bool TestConnection(string host, int port, int millisecondsTimeout)
{
TcpClient tc = new TcpClient();
try
{
var ar = tc.BeginConnect(host, port, null, null);
ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
return tc.Connected;
}
catch (Exception e)
{
throw e;
}
finally
{
tc.Close();
}
}
/// <summary>
/// 根据数据库连接字符串判断连接数据库是否正确
/// </summary>
/// <param name="connectionString">数据库连接操作</param>
/// <returns></returns>
public static bool TestSqlConnextion(string connectionString)
{
bool result = true;
try
{
SqlConnection sc = new SqlConnection(connectionString);
sc.Open();
sc.Close();
sc.Dispose();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
result = false;
}
return result;
}
/// <summary>
/// 使用config中sql连接判断是否连接到服务器并且成功连接数据库
/// </summary>
/// <param name="SqlserverConnectionSting"></param>
/// <returns></returns>
public static object[] TestSqlServerStart(string SqlserverConnectionSting)
{
object[] returnList = new object[] { };
string[] serverIpList = SqlserverConnectionSting.Split(';');
string tempStringHost = string.Empty;
string tempStringPort = string.Empty;
foreach (var item in serverIpList)
{
string tempstringItem = item.ToLower();
if (item.Contains("server"))
{
tempStringHost = tempstringItem.Split('=')[1].ToString();
if (tempStringHost.Contains(":"))
{
tempStringPort = tempStringHost.Split(':')[0].ToString();
}
else
{
tempStringPort = "1433";
break;
}
}
}
if (TestConnect.TestConnection(tempStringHost, int.Parse(tempStringPort), 60))
{
returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
if (TestConnect.TestSqlConnextion(SqlserverConnectionSting))
returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
else
returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
}
else
{
returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
}
return returnList;
}
/// <summary>
/// 使用config中ORCA连接判断是否连接到服务器并且成功连接数据库
/// </summary>
/// <param name="ORCAConnectionSting"></param>
/// <returns></returns>
public static object[] TestORCAStart(string ORCAConnectionSting)
{
object[] returnList = new object[] { };
ORCAConnectionSting = ORCAConnectionSting.ToUpper();
int pos_Host = ORCAConnectionSting.IndexOf("HOST", 0);
int pos_HostEnd = ORCAConnectionSting.IndexOf(")", pos_Host);
string host = ORCAConnectionSting.Substring(pos_Host + 1, pos_HostEnd - pos_Host - 1);
host = host.Split('=')[1];
int pos_Port = ORCAConnectionSting.IndexOf("PORT", 0);
int pos_PortEnd = ORCAConnectionSting.IndexOf(")", pos_Port);
string port = ORCAConnectionSting.Substring(pos_Port, pos_PortEnd - pos_Port - 1);
port = port.Split('=')[1];
if (TestConnect.TestConnection(host, int.Parse(port), 60))
{
returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
if (TestConnect.TestSqlConnextion(ORCAConnectionSting))
returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
else
returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
}
else
{
returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
}
return returnList;
}
}
}
if (ex is System.Data.SqlClient.SqlException)
{
LogInfo(DateTime.Now.ToString() + ex.ToString());
MessageBox.Show("连接数据库失败,请检查网络稍后重试", "连接服务器");
}
else
{
LogInfo(DateTime.Now.ToString() + ex.ToString());
MessageBox.Show(ex.ToString());
}
}
/// 数据库连接操作,可替换为你自己的程序
/// </summary>
/// <param name="ConnectionString">连接字符串</param>
/// <returns></returns>
private static bool TestConnection(string ConnectionString)
{
bool result = true;
try
{
SqlConnection m_myConnection = new SqlConnection(ConnectionString);
m_myConnection.Open();
//数据库操作......
m_myConnection.Close();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
result = false;
}
return result;
}
#region 采用Socket方式,测试服务器连接
/// <summary>
/// 采用Socket方式,测试服务器连接
/// </summary>
/// <param name="host">服务器主机名或IP</param>
/// <param name="port">端口号</param>
/// <param name="millisecondsTimeout">等待时间:毫秒</param>
/// <returns></returns>
public static bool TestConnection(string host, int port, int millisecondsTimeout)
{
TcpClient client = new TcpClient();
try
{
var ar = client.BeginConnect(host, port, null, null);
ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
return client.Connected;
}
catch (Exception e)
{
throw e;
}
finally
{
client.Close();
}
}
#endregion
private void btnSocket_Click(object sender, EventArgs e)
{
string strCon = "Data Source=;Initial Catalog=;User ID=;password=";
string[] s=strCon.Split(';');
s = s[0].Split('=');
//获取IP
string strIP =s[1];
//发送数据,判断是否连接到指定ip
if (TestConnection(strIP , 1433, 500))
{
//连接成功
MessageBox.Show("Socket Link Succeed","连接服务器");
// 数据库操作,我这里用了连接测试。可根据你的系统自行修改
if (TestConnection(strCon))
MessageBox.Show("Sql Link Succeed","连接数据库");
else
MessageBox.Show("Sql Link Failed", "连接数据库");
}
else
MessageBox.Show("Socket Link Failed","连接服务器");
}
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=)));User Id=;Password=
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Net.Sockets;
using System.Text;
namespace ZT_WhiteList_GuiZhouShiFan
{
public class TestConnect
{
/// <summary>
/// 使用socket方式,测试服务器连接
/// </summary>
/// <param name="host">IP地址</param>
/// <param name="port">端口号</param>
/// <param name="millisecondsTimeout">等待时间:毫秒</param>
/// <returns></returns>
public static bool TestConnection(string host, int port, int millisecondsTimeout)
{
TcpClient tc = new TcpClient();
try
{
var ar = tc.BeginConnect(host, port, null, null);
ar.AsyncWaitHandle.WaitOne(millisecondsTimeout);
return tc.Connected;
}
catch (Exception e)
{
throw e;
}
finally
{
tc.Close();
}
}
/// <summary>
/// 根据数据库连接字符串判断连接数据库是否正确
/// </summary>
/// <param name="connectionString">数据库连接操作</param>
/// <returns></returns>
public static bool TestSqlConnextion(string connectionString)
{
bool result = true;
try
{
SqlConnection sc = new SqlConnection(connectionString);
sc.Open();
sc.Close();
sc.Dispose();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
result = false;
}
return result;
}
/// <summary>
/// 使用config中sql连接判断是否连接到服务器并且成功连接数据库
/// </summary>
/// <param name="SqlserverConnectionSting"></param>
/// <returns></returns>
public static object[] TestSqlServerStart(string SqlserverConnectionSting)
{
object[] returnList = new object[] { };
string[] serverIpList = SqlserverConnectionSting.Split(';');
string tempStringHost = string.Empty;
string tempStringPort = string.Empty;
foreach (var item in serverIpList)
{
string tempstringItem = item.ToLower();
if (item.Contains("server"))
{
tempStringHost = tempstringItem.Split('=')[1].ToString();
if (tempStringHost.Contains(":"))
{
tempStringPort = tempStringHost.Split(':')[0].ToString();
}
else
{
tempStringPort = "1433";
break;
}
}
}
if (TestConnect.TestConnection(tempStringHost, int.Parse(tempStringPort), 60))
{
returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
if (TestConnect.TestSqlConnextion(SqlserverConnectionSting))
returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
else
returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
}
else
{
returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
}
return returnList;
}
/// <summary>
/// 使用config中ORCA连接判断是否连接到服务器并且成功连接数据库
/// </summary>
/// <param name="ORCAConnectionSting"></param>
/// <returns></returns>
public static object[] TestORCAStart(string ORCAConnectionSting)
{
object[] returnList = new object[] { };
ORCAConnectionSting = ORCAConnectionSting.ToUpper();
int pos_Host = ORCAConnectionSting.IndexOf("HOST", 0);
int pos_HostEnd = ORCAConnectionSting.IndexOf(")", pos_Host);
string host = ORCAConnectionSting.Substring(pos_Host + 1, pos_HostEnd - pos_Host - 1);
host = host.Split('=')[1];
int pos_Port = ORCAConnectionSting.IndexOf("PORT", 0);
int pos_PortEnd = ORCAConnectionSting.IndexOf(")", pos_Port);
string port = ORCAConnectionSting.Substring(pos_Port, pos_PortEnd - pos_Port - 1);
port = port.Split('=')[1];
if (TestConnect.TestConnection(host, int.Parse(port), 60))
{
returnList = new object[] { true, 1, "Socket Link Succeed", "连接服务器" };
if (TestConnect.TestSqlConnextion(ORCAConnectionSting))
returnList = new object[] { true, 2, "Sql Link Succeed", "连接数据库" };
else
returnList = new object[] { false, 2, "Sql Link Failed", "连接数据库" };
}
else
{
returnList = new object[] { false, 1, "Socket Link Failed", "连接服务器" };
}
return returnList;
}
}
}
参考:http://www.jb51.net/article/65019.htm
20180601增加:
增加异常判断:
catch (Exception ex)
{if (ex is System.Data.SqlClient.SqlException)
{
LogInfo(DateTime.Now.ToString() + ex.ToString());
MessageBox.Show("连接数据库失败,请检查网络稍后重试", "连接服务器");
}
else
{
LogInfo(DateTime.Now.ToString() + ex.ToString());
MessageBox.Show(ex.ToString());
}
}
这样处理起来更舒服点