最近写一个项目,我开发的方式首先设计数据库,然后用网上免费的代码生成软件CodePlus V2.0生成mode对象,同时封装操作方法,在与数据库操作方面我封装了一个数据操作类,很方便,贡献出来。

Code
public static class SqlPlus

{

// Hashtable to store cached parameters
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

public static string connectionString = "Data Source=spsserver;Initial Catalog=Cooec;uid=sa;pwd=ssssaaaa";

public static SqlTransaction GetTransaction()

{
using (SqlConnection connection = new SqlConnection(SqlPlus.connectionString))

{
connection.Open();
SqlTransaction trans = connection.BeginTransaction();
return trans;
}
}

public static void ConnClose(SqlConnection connection)

{
if (connection.State == ConnectionState.Open)

{
connection.Close();
}
}

public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(SqlPlus.connectionString))

{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}

public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}

public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}

public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(SqlPlus.connectionString);

// we use a try/catch here because if the method throws an exception we want to
// close the connection throw code, because no datareader will exist, hence the
// commandBehaviour.CloseConnection will not work
try

{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch

{
conn.Close();
throw;
}
}

public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{
SqlCommand cmd = new SqlCommand();

using (SqlConnection connection = new SqlConnection(SqlPlus.connectionString))

{
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}

public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}

public static DataTable ExecuteDataTable(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)

{
SqlCommand cmd = new SqlCommand();
DataTable oTab = new DataTable();
using (SqlConnection connection = new SqlConnection(SqlPlus.connectionString))

{
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(oTab);
}
return oTab;
}

public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)

{
parmCache[cacheKey] = commandParameters;
}

public static SqlParameter[] GetCachedParameters(string cacheKey)

{
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

if (cachedParms == null)
return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

for (int i = 0, j = cachedParms.Length; i < j; i++)
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

return clonedParms;
}

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)

{

if (conn.State != ConnectionState.Open)
conn.Open();

cmd.Connection = conn;
cmd.CommandText = cmdText;

if (trans != null)
cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null)

{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}

public static class Database

{
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
return sqlPar;
}
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size, object oValue)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
sqlPar.Value = oValue;
return sqlPar;
}
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size, string sValue)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
sqlPar.Value = sValue;
return sqlPar;
}
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size, int iValue)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
sqlPar.Value = iValue;
return sqlPar;
}
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size, DateTime dValue)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
if (dValue == DateTime.MinValue)
sqlPar.Value = DBNull.Value;
else
sqlPar.Value = dValue;
return sqlPar;
}
public static SqlParameter MakeInParam(string parameterName, SqlDbType dbType, int size, double dValue)

{
SqlParameter sqlPar = new SqlParameter(parameterName, dbType, size);
sqlPar.Value = dValue;
return sqlPar;
}
public static string ValueToString(object oValue)

{
if (oValue == System.DBNull.Value)
return "";
else
return oValue.ToString();
}
public static DateTime ValueToDateTime(object oValue)

{
if (oValue == System.DBNull.Value)
return DateTime.MinValue;
else
return Convert.ToDateTime(oValue);
}
public static int ValueToInt(object oValue)

{
if (oValue == System.DBNull.Value)
return int.MinValue;
else
return Convert.ToInt32(oValue);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构