感谢大家我的代码审查! [英] Thanks to everyone my code review!
问题描述
我已完成编写可访问db的库,希望您浏览帮助并告诉我它对我而言是完成编辑的好地方.非常感谢.
I finished writing a library to access the db, I want you to see through the help and tell me it''s good or bad place for me to complete editing. thank you so much.
class _
{
private static DbConnection _connection;
private static DbProviderFactory _provider;
/// <summary>
/// Thuc hien ket noi
/// </summary>
/// <param name="providerName">Provider name</param>
/// <param name="connectionString">Connection string</param>
public static void Connect(string providerName, string connectionString)
{
_provider = DbProviderFactories.GetFactory(providerName);
_connection = _provider.CreateConnection();
_connection.ConnectionString = connectionString;
Close();
}
/// <summary>
/// Mo ket noi
/// </summary>
private static void Open()
{
// kiem tra tinh trang ket noi
if (_connection.State == ConnectionState.Closed)
// mo ket noi
_connection.Open();
}
/// <summary>
/// Dong ket noi
/// </summary>
private static void Close()
{
if (_connection.State == ConnectionState.Open)
_connection.Close();
}
/// <summary>
/// Lay DataSet
/// </summary>
/// <param name="query">Query string</param>
/// <returns>DataSet</returns>
public static DataSet GetDataSet(string query)
{
try
{
// mo ket noi
Open();
// tao adapter
DbDataAdapter adapter = GetAdapter(GetCommand(query));
// fill dataset
DataSet set = new DataSet();
adapter.Fill(set);
// dong ket noi
Close();
// return ket qua
return set;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Lay DataTable
/// </summary>
/// <param name="query">Query string</param>
/// <returns>DataTable</returns>
public static DataTable GetDataTable(string query)
{
try
{
// mo ket noi
Open();
// Tao adapter
DbDataAdapter adapter = GetAdapter(GetCommand(query));
// fill table
DataTable table = new DataTable();
adapter.Fill(table);
// tra ra du lieu
return table;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// Lay collection<T>
/// </summary>
/// <typeparam name="T">Object</typeparam>
/// <typeparam name="TMapper">ObjectMapper</typeparam>
/// <param name="query">query string</param>
/// <returns>List<T></returns>
public static List<T> GetListObject<T, TMapper>(string query)
where T : class, new()
where TMapper : Mapper<T>, new()
{
TMapper mapper = new TMapper();
// mo ket noi
Open();
// tao command
DbCommand command = GetCommand(query);
// tra ra tap hop du lieu
return mapper.MapAll(command.ExecuteReader(CommandBehavior.CloseConnection));
}
/// <summary>
/// lay doi tuong
/// </summary>
/// <typeparam name="T">Class, new</typeparam>
/// <typeparam name="TMapper">Mapper, new</typeparam>
/// <param name="query">query string</param>
/// <returns>Object</returns>
public static T GetObject<T, TMapper>(string query)
where T : class, new()
where TMapper : Mapper<T>, new()
{
// tao mapper
TMapper mapper = new TMapper();
// mo ket noi
Open();
// tao command
DbCommand command = GetCommand(query);
// tra ra bo du lieu
return mapper.MapFirst(command.ExecuteReader(CommandBehavior.CloseConnection));
}
/// <summary>
/// thuc thi lenh
/// </summary>
/// <param name="query">query string</param>
public static void Execute(string query)
{
try
{
// open
Open();
// tao command
DbCommand command = GetCommand(query);
// thuc thi lenh
command.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Close();
}
}
/// <summary>
///
/// </summary>
/// <param name="queries"></param>
public static void Execute(List<string> queries)
{
// open
Open();
// tao transaction
DbTransaction transaction = _connection.BeginTransaction();
// tao command
DbCommand command = _provider.CreateCommand();
// gan ket noi cho command
command.Connection = _connection;
// gan transaction cho command
command.Transaction = transaction;
try
{
// thuc thi danh sach lenh
foreach (string query in queries)
{
// set command text
command.CommandText = query;
// thuc thi lenh
command.ExecuteNonQuery();
}
// commit trasaction
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);
// Attempt to roll back the transaction.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
finally
{
Close();
}
}
/// <summary>
/// Lay adapter
/// </summary>
/// <param name="command">DbCommand</param>
/// <returns>DbDataAdapter</returns>
private static DbDataAdapter GetAdapter(DbCommand command)
{
// tao adapter
DbDataAdapter adapter = _provider.CreateDataAdapter();
// select command cho adapter
adapter.SelectCommand = command;
// tra ra adapter
return adapter;
}
/// <summary>
/// Lay command
/// </summary>
/// <param name="query">string query</param>
/// <returns>DbCommand</returns>
private static DbCommand GetCommand(string query)
{
// tao command
DbCommand command = _provider.CreateCommand();
// set command text
command.CommandText = query;
// set connection cho command
command.Connection = _connection;
// tra ra command
return command;
}
}
/// <summary>
/// mapper
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class Mapper<T> where T : class, new()
{
/// <summary>
/// Ham nay phai override lai de xai
/// trong truong hop xai List<T>
/// </summary>
/// <param name="record"></param>
/// <returns></returns>
protected abstract T Map(IDataRecord record);
/// <summary>
/// Get all collection
/// </summary>
/// <param name="reader">IDataReader</param>
/// <returns>List<T></returns>
public List<T> MapAll(IDataReader reader)
{
// tao collection
List<T> collection = new List<T>();
// duyet reader
while (reader.Read())
{
// add T vo collection
collection.Add(Map(reader));
}
// tra ra doi tuong
return collection;
}
/// <summary>
/// Lay T
/// </summary>
/// <param name="reader">IDataReader</param>
/// <returns>T</returns>
public T MapFirst(IDataReader reader)
{
// doc reader
if (reader.Read())
{
// tra ra doi tuong dau tien
return Map(reader);
}
// tra ra null
return null;
}
}
推荐答案
您没有遵守Microsoft的命名约定.使用FxCop, http://en.wikipedia.org/wiki/FxCop [
代码
You do not observe Microsoft naming conventions. Use FxCop, http://en.wikipedia.org/wiki/FxCop[^].
Comment code in English only.
Is the class name "_"?! Are you serious?
The code
try
{
SomeCode();
}
catch (Exception)
{
throw;
}
严格等于
is strictly equivalent to
SomeCode();
就是说-您不知道如何使用异常.搁置一切并学习,然后再进行下一步.
您可以在这里找到一些建议:
我如何制作滚动条到达底部时将停止的循环 [当我运行应用程序时,异常是捕获了如何处理? [
That said — you have no idea how to use exceptions. Set aside everything and learn it before you move any further.
You can find some advices here:
How do i make a loop that will stop when a scrollbar reaches the bottom[^],
When i run an application an exception is caught how to handle this?[^].
However, you need first learn how they work. For now, just remove all exception-related code from your library — will be much better. Exceptions are mostly processed by applications of a very top of stack, very little of exception catching is done in libraries. Don''t fall into "defensive" code, exception designed to make the code more "offensive".
这篇关于感谢大家我的代码审查!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!