Cargando...
Buscando...
Nada coincide
ConexionSQL.cs
1using sage.ew.db;
2using System;
3using System.Collections.Generic;
4using System.Data.SqlClient;
5using System.Diagnostics.CodeAnalysis;
6using System.Linq;
7using System.Text;
8using System.Threading.Tasks;
9
11{
16 {
21
26
31
36 }
37
41 [ExcludeFromCodeCoverage]
42 internal class ConexionSQL
43 {
47 public string _cIp { get; set; }
48
52 public string _cUser { get; set; }
53
57 public string _cPassword { get; set; }
58
62 public string _cComunes { get; set; }
63
67 public bool _lAuthWin { get; set; }
68
72 public string _cAlias { get; set; }
73
77 public bool _lExternal_Entry { get; set; }
78
82 public TipoErrorConexion _TipoError { get; private set; }
83
87 public string _MensajeError { get; private set; }
88
92 public ConexionSQL()
93 {
94 _cIp = string.Empty;
95 _cUser = string.Empty;
96 _cPassword = string.Empty;
97 _cComunes = string.Empty;
98 _lAuthWin = false;
99 _cAlias = string.Empty;
100 _lExternal_Entry = false;
101 _TipoError = TipoErrorConexion.Ninguno;
102 _MensajeError = string.Empty;
103 }
104
105 internal string BuildConnectionString()
106 {
107 SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
108
109 builder.DataSource = _cIp;
110 builder.InitialCatalog = _cComunes;
111 builder.PersistSecurityInfo = true;
112 builder.ConnectTimeout = 1800;
113
114 if (_lAuthWin)
115 {
116 // Windows Authentication
117 builder.IntegratedSecurity = true;
118 }
119 else
120 {
121 // SQL Server Authentication
122 builder.UserID = _cUser;
123 builder.Password = _cPassword;
124 }
125
126 return builder.ConnectionString;
127 }
128
133 public bool ConectarSQL()
134 {
135 bool lbOk = false;
136
137 // Resetear valores de error
138 _TipoError = TipoErrorConexion.Ninguno;
139 _MensajeError = string.Empty;
140
141 try
142 {
143 lbOk = DB.SQLConnect(_cIp, _cUser, _cPassword, _cComunes, tcAliasConexion: _cAlias, tbAuthWin: _lAuthWin, tnConnectionTimout: 20);
144
145 if (!lbOk)
146 {
147 // Si la conexión falla, analizar el error de DB
148 AnalizarError(DB.Error_Message_Exception);
149 }
150 }
151 catch (Exception ex)
152 {
153 lbOk = false;
154 AnalizarError(ex);
155 }
156
157 return lbOk;
158 }
159
164 private void AnalizarError(Exception ex)
165 {
166 if (ex == null)
167 {
168 _TipoError = TipoErrorConexion.Otros;
169 _MensajeError = DB.Error_Message ?? "Error desconocido al conectar con SQL Server";
170 return;
171 }
172
173 // Analizar SqlException
174 if (ex is SqlException sqlEx)
175 {
176 ClasificarErrorSQL(sqlEx);
177 }
178 else
179 {
180 // Otros tipos de excepción
181 _TipoError = TipoErrorConexion.Otros;
182 _MensajeError = ex.Message;
183 }
184 }
185
190 private void ClasificarErrorSQL(SqlException sqlEx)
191 {
192 switch (sqlEx.Number)
193 {
194 // Errores de autenticación
195 case 18456: // Login failed for user
196 case 18452: // Login failed from untrusted domain
197 case 18486: // Account locked
198 case 18487: // Password expired
199 case 18488: // Password must be changed
200 _TipoError = TipoErrorConexion.Autenticacion;
201 _MensajeError = "Error de autenticación: Usuario o contraseña incorrectos.";
202 break;
203
204 // Errores de conexión/timeout
205 case -1: // Timeout expired / Cannot connect
206 case -2: // Timeout expired
207 case 53: // Network path not found / SQL Server doesn't exist or access denied
208 case 2: // Network error / Instance not found
209 case 233: // Connection initialization error
210 case 64: // Error occurred during login process
211 case 17142: // SQL Server service paused
212 case 17832: // Connection could not be established
213 case 4060: // Cannot open database
214 _TipoError = TipoErrorConexion.Conexion;
215 _MensajeError = "Error de conexión: No se puede conectar al servidor SQL. El servidor podría estar apagado o no disponible.";
216 break;
217
218 // Otros errores
219 default:
220 _TipoError = TipoErrorConexion.Otros;
221 _MensajeError = $"Error SQL ({sqlEx.Number}): {sqlEx.Message}";
222 break;
223 }
224 }
225
230 public bool EsErrorAutenticacion()
231 {
232 return _TipoError == TipoErrorConexion.Autenticacion;
233 }
234
239 public bool EsErrorConexion()
240 {
241 return _TipoError == TipoErrorConexion.Conexion;
242 }
243 }
244}
TipoErrorConexion
Tipo de error de conexión SQL.
@ Ninguno
Sin error o no determinado.
@ Conexion
Error de conexión (timeout, servidor no disponible)
@ Otros
Otros tipos de error.
@ Autenticacion
Error de autenticación (usuario/contraseña incorrectos)