Я создаю веб-сайт asp.net, на котором мне нужно отслеживать различные исключения, такие как дублирование электронной почты пользователя или данные, вставленные или нет, или исключения внешнего ключа, но sql server 2016 всегда возвращает код ошибки -2146232060. Я слышал о повторяющемся коде ошибки 2206 или что-то в этом роде.
Это мой класс .DBManager
, который я использовал для вставки или извлечения данных.
class DBManager : IDisposable
{
private DbConnection con;
private DbCommand command;
public DBManager() : this("DefaultConnection") { }
public DBManager(string connectionStringName)
{
string connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
con = new SqlConnection(connectionString);
}
public int ExecuteNonQuery()
{
int result;
if (command == null)
{
return -5;
}
try
{
con.Open();
result = command.ExecuteNonQuery();
}
catch (DbException ex)
{
result = ex.ErrorCode;
}
finally
{
con.Close();
}
return result;
}
public DataTable ExecuteDataTable()
{
DataTable dt = new DataTable();
SqlDataAdapter da;
if (command == null)
{
return dt;
}
try
{
da = new SqlDataAdapter();
con.Open();
da.SelectCommand = (SqlCommand) command;
}
finally
{
con.Close();
}
da.Fill(dt);
return dt;
}
public object ExecuteScalar()
{
object result;
if (command == null)
{
return -5;
}
try
{
con.Open();
result = command.ExecuteScalar();
}
catch (DbException ex)
{
result = ex.ErrorCode;
}
finally
{
con.Close();
}
return result;
}
public DataSet ExecuteDataSet()
{
DataSet ds = new DataSet();
if (command == null)
{
return ds;
}
try
{
con.Open();
DbDataAdapter ad = new SqlDataAdapter((SqlCommand)command);
ad.Fill(ds);
}
finally
{
con.Close();
}
return ds;
}
public void SetSqlStringCommand(string commandText)
{
command = GetCommand(commandText, CommandType.Text);
}
public void SetStoredProcedureCommand(string commandText)
{
command = GetCommand(commandText, CommandType.StoredProcedure);
}
private DbCommand GetCommand(string commandText, CommandType commandType)
{
DbCommand command = con.CreateCommand();
command.CommandType = commandType;
command.CommandText = commandText;
return command;
}
public void AddInParameter(string name, DbType dbType, object value)
{
if (command != null)
{
AddParameter(command, name, dbType, value, ParameterDirection.Input, 0);
}
else
{
throw new ArgumentException("Command cannot be null");
}
}
public void AddOutParameter(string name, DbType dbType, int size)
{
if (command != null)
{
AddParameter(command, name, dbType, null, ParameterDirection.Output, size);
}
else
{
throw new ArgumentException("Command cannot be null");
}
}
private void AddParameter(DbCommand command, string name, DbType dbType, object value,
ParameterDirection direction, int size)
{
var parameter = command.CreateParameter();
parameter.ParameterName = name;
parameter.DbType = dbType;
parameter.Value = value ?? DBNull.Value;
parameter.Direction = direction;
if (size > 0)
{
parameter.Size = size;
}
command.Parameters.Add(parameter);
}
public void Dispose()
{
if (command != null)
{
command.Dispose();
command = null;
}
if (con != null)
{
con.Dispose();
con = null;
}
}
}
Это потому, что я использую класс DbConnection
вместо SqlConnection
?
catch
; 2. включите по крайней мере свойствоMessage
в свою диагностику, 3. не перехватывайте исключение без повторного создания, если вы эффективно не обработали исключение. - person Richard   schedule 06.02.2018