声明,我是小白,大家莫笑,写了一个用来控制数据库连接的基类,求改进。
总觉得connection这部分控制的不好,常常看别人写这类代码用连接池,或单例模式之类的,不是很懂,现在这段代码是能跑起来,但是仍然感觉缺点很多,求各位大侠改进,谢谢!
public class BaseAccess
{
private static SqlConnection con = null;
private static SqlCommand cmd = null; public int ExecuteNonQuery(string sql, Dictionary<string, object> Parameters)
{
int result = 0;
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd = AddParameters(cmd, Parameters);
result = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return result;
} public int ExecuteNonQuery(string sql)
{
return ExecuteNonQuery(sql, null);
} public DataSet ExecuteDataSet(string sql, Dictionary<string, object> Parameters)
{
DataSet ds = new DataSet();
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd = AddParameters(cmd, Parameters);
SqlDataAdapter adapt = new SqlDataAdapter(cmd); adapt.Fill(ds); }
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return ds;
} public DataSet ExecuteDataSet(string sql)
{
return ExecuteDataSet(sql, null);
} public DataTable ExecuteDataTable(string sql, Dictionary<string, object> Parameters)
{
DataSet ds = ExecuteDataSet(sql, Parameters);
return ds.Tables[0];
} public DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, null);
} public object ExecuteScalar(string sql, Dictionary<string, object> Parameters)
{
object result = null;
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd=AddParameters(cmd, Parameters);
result = cmd.ExecuteScalar();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return result;
} #region private function
private SqlCommand AddParameters(SqlCommand cmd, Dictionary<string, object> sqlParameters)
{
try
{
if (sqlParameters != null)
{
foreach (var item in sqlParameters)
{
cmd.Parameters.AddWithValue(item.Key, item.Value);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return cmd;
}
#endregion
总觉得connection这部分控制的不好,常常看别人写这类代码用连接池,或单例模式之类的,不是很懂,现在这段代码是能跑起来,但是仍然感觉缺点很多,求各位大侠改进,谢谢!
public class BaseAccess
{
private static SqlConnection con = null;
private static SqlCommand cmd = null; public int ExecuteNonQuery(string sql, Dictionary<string, object> Parameters)
{
int result = 0;
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd = AddParameters(cmd, Parameters);
result = cmd.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return result;
} public int ExecuteNonQuery(string sql)
{
return ExecuteNonQuery(sql, null);
} public DataSet ExecuteDataSet(string sql, Dictionary<string, object> Parameters)
{
DataSet ds = new DataSet();
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd = AddParameters(cmd, Parameters);
SqlDataAdapter adapt = new SqlDataAdapter(cmd); adapt.Fill(ds); }
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return ds;
} public DataSet ExecuteDataSet(string sql)
{
return ExecuteDataSet(sql, null);
} public DataTable ExecuteDataTable(string sql, Dictionary<string, object> Parameters)
{
DataSet ds = ExecuteDataSet(sql, Parameters);
return ds.Tables[0];
} public DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, null);
} public object ExecuteScalar(string sql, Dictionary<string, object> Parameters)
{
object result = null;
try
{
con = connection.sqlconnection;
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql;
cmd=AddParameters(cmd, Parameters);
result = cmd.ExecuteScalar();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
con.Close();
}
return result;
} #region private function
private SqlCommand AddParameters(SqlCommand cmd, Dictionary<string, object> sqlParameters)
{
try
{
if (sqlParameters != null)
{
foreach (var item in sqlParameters)
{
cmd.Parameters.AddWithValue(item.Key, item.Value);
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return cmd;
}
#endregion
http://weixueliang89.blog.163.com/blog/static/19792177420121041085910/
佩服!这个博客里面的内容眼前一亮,特别是android部分。