求一性能较好的c#数据库操作类-

qqhmitzk 2007-07-26 07:58:46
前一段时间在网上收集关于数据库操作类的,总觉得性能不怎么样,而微软的那个SQLHelper 有点让人摸不着头脑,也没有找着专门的使用文档.
请哪位高手做过相关的研究没?望赐教
...全文
2306 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
panzi667 2007-10-05
  • 打赏
  • 举报
回复
呵呵,收下咯
qqhmitzk 2007-07-27
  • 打赏
  • 举报
回复
我先试一试,谢谢 fscnt(走丢了)
qqhmitzk 2007-07-27
  • 打赏
  • 举报
回复
最近朋友公司的数据处理类,性能也不错.有十几中调用方法,就是被封装了,无法研究它,各位仁兄有更好的数据苦操作类吗?
fscnt 2007-07-27
  • 打赏
  • 举报
回复
自己写的,也不知道能不能用上
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace LY
{
class C_Public
{
private string strSQL;
private SqlConnection myConnection = null;
private SqlCommand cmd;
private SqlCommandBuilder sqlCmdBld;
private DataSet ds = new DataSet();
private SqlDataAdapter da;
private static SqlTransaction Transaction = null; //数据库事务
private static bool IsInTransaction = false; //是否在事务中
//程序用到的存储数据变量
public class AppNeddInfo
{
public static string psWorker;
}
public C_Public()
{
}
private void openLink()
{
string ConnectionText; //Store The Connection Sentence for Database
if ((myConnection == null) || (myConnection.State == ConnectionState.Closed))
{
ConnectionText = ReadConn();
myConnection = new SqlConnection(ConnectionText);
try
{
myConnection.Open();//Open Database
}
catch
{
myConnection = null;
}
}
}
public string ReadConn()
{
string str = "server=FYGS-X;database=text;uid=sa;pwd=sa";
return str;
}
//数据库连接参数
public SqlConnection DataConn()
{
return myConnection;
}
//开始一个事务
public void BeginTransaction()
{
if ((myConnection == null) || (myConnection.State == ConnectionState.Closed))
{
return;
}
else
{
Transaction = myConnection.BeginTransaction();
IsInTransaction = true;
}
}
//提交一个事务
public void CommitTransaction()
{
if (Transaction != null)
{
Transaction.Commit();
IsInTransaction = false;
Transaction = null;
myConnection.Close();
}
else
{
return;
}
}
//回滚一个事务
public void RollbackTransaction()
{
if (Transaction != null)
{
Transaction.Rollback();
IsInTransaction = false;
Transaction = null;
myConnection.Close();
}
else
{
return;
}
}

public DataSet SelectDataBase(string tempStrSQL, string tempTableName)
{
openLink();
this.strSQL = tempStrSQL;
this.da = new SqlDataAdapter(this.strSQL, this.myConnection);
this.ds.Clear();
this.da.Fill(ds, tempTableName);
myConnection.Close();
return ds;//返回填充了数据的DataSet,其中数据表以tempTableName给出的字符串命名
}
//数据库数据更新(传DataSet和DataTable的对象)
public DataSet UpdateDataBase(DataSet changedDataSet, string tableName)
{
openLink();
this.da = new SqlDataAdapter(this.strSQL, this.myConnection);
this.sqlCmdBld = new SqlCommandBuilder(da);
this.da.Update(changedDataSet, tableName);
myConnection.Close();
return changedDataSet;//返回更新了的数据库表
}
//检索数据库数据(传字符串,直接操作数据库)
public DataTable SelectDataBase(string tempStrSQL)
{
openLink();
DataSet tempDataSet = new DataSet();
this.da = new SqlDataAdapter(tempStrSQL, this.myConnection);
this.da.Fill(tempDataSet);
myConnection.Close();
return tempDataSet.Tables[0];
}
//返回单个字符
public string GetDataChar(string tempStrSQl, string tempReturnChar)
{
openLink();
cmd = new SqlCommand(tempStrSQl, myConnection);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
string returnChar = dr[tempReturnChar].ToString();
myConnection.Close();
return returnChar;
}
myConnection.Close();
return "";
}
//数据库数据更新(传字符串,直接操作数据库)
public int UpdateDataBase(string tempStrSQL)
{
openLink();
//使用Command之前一定要先打开连接,后关闭连接,而DataAdapter则会自动打开关闭连接
myConnection.Open();
SqlCommand tempSqlCommand = new SqlCommand(tempStrSQL, this.myConnection);
int intNumber = tempSqlCommand.ExecuteNonQuery();//返回数据库中影响的行数
myConnection.Close();
return intNumber;
}
//检索数据库数据(返回记录数)
public int SelectData(string tempSQL)
{
openLink();
DataSet tempDataSet = new DataSet();
this.da = new SqlDataAdapter(tempSQL, this.myConnection);
this.da.Fill(tempDataSet);
myConnection.Close();
return tempDataSet.Tables[0].Rows.Count;
}
//执行数据库操作
public void DoCommand(string sqlStr)
{
openLink();
cmd = new SqlCommand("", myConnection);
if (IsInTransaction) cmd.Transaction = Transaction;
cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
if (IsInTransaction == false) myConnection.Close();
}
}
}
qqhmitzk 2007-07-27
  • 打赏
  • 举报
回复
我的有好友用的类有十八种方法,性能还不错,但是封装了的,无发去研究他,各位仁兄有更好的吗?
blankfang 2007-07-26
  • 打赏
  • 举报
回复
个人感觉用在不同的地方
就是效果不一样!!
cmHua 2007-07-26
  • 打赏
  • 举报
回复
其实微软的企业库是一个不错的选择,如果楼主真的要学习但又不想看它的英文注释的话可以去书店找一下,上次我有看到一本专门写企业库的书,不过不记得书名了,只能帮你这么多了:)
zmj1563 2007-07-26
  • 打赏
  • 举报
回复
我这里有个简单的

using System;
using System.Data.SqlClient;
using System.Data;

namespace 数据报表模块
{
/// <summary>
/// DBUtil 的摘要说明。
/// </summary>
public class DBUtil
{
private static string strConnect =
System.Configuration.ConfigurationSettings.AppSettings["connStr"];


public static int SqlExecuteNonQuery(SqlCommand objCommand)
{
SqlConnection objConnection=new SqlConnection(strConnect);
objCommand.Connection=objConnection;
try
{
if(objConnection.State==ConnectionState.Closed)
{
objConnection.Open();
}
return objCommand.ExecuteNonQuery();
}
catch(Exception e)
{
throw e;
}
finally
{
if(objConnection.State==ConnectionState.Open)
{
objConnection.Close();
}
}
}
//重写SqlExecuteNonQuery,这样写以后调用类时只用写SQL命令
public static int SqlExecuteNonQuery(string strCmd)
{
SqlCommand objCommand=new SqlCommand(strCmd);
//调用已定义的方法
return SqlExecuteNonQuery(objCommand);
}


//带返回结果的SqlExecuteReader,不采用重写的方法
public static SqlDataReader SqlExecutrReader(string strCmd)
{
SqlConnection objConnection=new SqlConnection(strConnect);
SqlCommand objCommand=new SqlCommand(strCmd,objConnection);
try
{
if(objConnection.State==ConnectionState.Closed)
{
objConnection.Open();
}
return objCommand.ExecuteReader();
}
catch(Exception e)
{
throw e;
}
finally
{
if(objConnection.State==ConnectionState.Open)
{
objConnection.Close();
}
}
}


//返回查询结果的SqlExecuteScalar
public static object SqlExecuteScalar(SqlCommand objCommand)
{
SqlConnection objConnection=new SqlConnection(strConnect);
objCommand.Connection=objConnection;
try
{
if(objConnection.State==ConnectionState.Closed)
{
objConnection.Open();
}
return objCommand.ExecuteScalar();
}
catch(Exception e)
{
throw e;
}
finally
{
if(objConnection.State==ConnectionState.Open)
{
objConnection.Close();
}
}
}
//重写SqlExecuteScalar
public static object SqlExecuteScalar(string strCmd)
{
SqlCommand objCommand=new SqlCommand();
objCommand.CommandText=strCmd;
return SqlExecuteScalar(objCommand);
}

//返回DataSet
public static DataSet GetDataSet(string strCmd,string TableName)
{
SqlConnection objConnection=new SqlConnection(strConnect);
SqlCommand objCommand=new SqlCommand(strCmd,objConnection);
try
{
if(objConnection.State==ConnectionState.Closed)
{
objConnection.Open();
}
DataSet objDs=new DataSet();
SqlDataAdapter objDa=new SqlDataAdapter(objCommand);
objDa.Fill(objDs,TableName);
return objDs;
}
catch(Exception e)
{
throw e;
}
finally
{
if(objConnection.State==ConnectionState.Open)
{
objConnection.Close();
}
}

}
public DBUtil()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
}
SassyBoy 2007-07-26
  • 打赏
  • 举报
回复
int rowEffect=SqlHelper.ExecuteNonQuery("constr",CommandType.Text,"sql");
就可以了
SassyBoy 2007-07-26
  • 打赏
  • 举报
回复
SQLHElper执行的都是什么存储过程,有执行SQL语句的没有,比如删除,更新等SQL单一的语句,而不是存储过程
---------------------------
谁说没有?这个不是吗?!!!

public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
{
//pass through the call providing null for the set of SqlParameters
return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);
}
YUAN168 2007-07-26
  • 打赏
  • 举报
回复
太简单了吧!

把你要用的操作都做成静态的方法就OK了啊...

传递几个参数过去嘛
qqhmitzk 2007-07-26
  • 打赏
  • 举报
回复

zh_li_(我爸的儿子) ( )
你能给个使用样例不?
zh-wall-e 2007-07-26
  • 打赏
  • 举报
回复
我这儿有个不用存储过程的,需要自已定义SQl语句

using System;
using System.Data;
using System.Data.SqlClient;

namespace Aptech.Student.Common
{

public class DataBaseOperate:IDisposable
{
// 保存数据库连接字符串
private string m_sConnectionString;

// 数据库连接标志
private bool m_bConnected;

// 存储过程开启标志
private bool m_bTransaction;


//数据库连接对象
private SqlConnection m_sqlConnection;
private SqlCommand m_sqlCommand;
private SqlTransaction m_sqlTransaction;
private SqlDataAdapter m_sqlDataAdapter;

/// <summary>
/// 构造函数,初始化内部变量
/// </summary>
public DataBaseOperate()
:this("user id=sa;password=510902;data source=\"YAOYANG\\YAOYANG\";initial catalog=Student")
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public DataBaseOperate(
string sConnectionString)
{
if (sConnectionString != "")
{
m_sConnectionString = sConnectionString;
m_bConnected = false;
}
m_bTransaction = false;
}

/// <summary>
/// 连接数据库,并打开数据库连接
/// </summary>
/// <returns>成功返回true</returns>
private bool ConnectDataBase()
{
if (!m_bConnected)
{
try
{
if (m_sqlConnection == null)
{
m_sqlConnection = new SqlConnection(m_sConnectionString);
m_sqlConnection.Open();
}

if (m_sqlCommand == null)
{
m_sqlCommand = new SqlCommand();
}
m_bConnected = true;
m_sqlCommand.Connection = m_sqlConnection;
}
catch(SqlException e)
{
throw e;
}
}
return true;
}

/// <summary>
/// 关闭数据库,释放数据库资源
/// </summary>
/// <returns>成功返回true</returns>
public bool CloseDataBase()
{
Dispose();
return true;
}

/// <summary>
/// 执行数据库查询操作
/// </summary>
/// <param name="sQuery">查询的Sql语句</param>
/// <param name="sTableName">返回数据集的表名</param>
/// <returns>返回数据集</returns>
public DataSet Search(
string sQuery,
string sTableName )
{

//若连接数据库失败抛出错误
if (!ConnectDataBase())
{
throw(new ApplicationException("没有建立数据库连接。"));
}

DataSet dataSet = new DataSet();
m_sqlCommand.CommandType = System.Data.CommandType.Text;
m_sqlCommand.CommandText = sQuery;
m_sqlDataAdapter = new SqlDataAdapter();
m_sqlDataAdapter.SelectCommand = m_sqlCommand;
try
{
m_sqlDataAdapter.Fill(
dataSet,
sTableName);
}
catch(SqlException e)
{
//如果正在执行事务,回滚
if(m_bTransaction)
{
m_sqlTransaction.Rollback();
}
throw e;
}
return dataSet;
}


/// <summary>
/// 执行修改数据库操作,修改、删除等无返回值的操作
/// </summary>
/// <param name="sSql">执行的SQL语句</param>
/// <returns>成功执行返回True</returns>
public bool Execute(
string sSql)
{

if (!ConnectDataBase())
{
throw(new ApplicationException("没有建立数据库连接"));
}

m_sqlCommand.CommandType = System.Data.CommandType.Text;
m_sqlCommand.CommandText = sSql;
try
{
m_sqlCommand.ExecuteNonQuery();
}
catch(SqlException e)
{
//如果正在执行事务,回滚
if(m_bTransaction)
{
m_sqlTransaction.Rollback();
}
throw e;
}
return true;
}

/// <summary>
/// 开始事务处理功能,之后执行的全部数据库操作语句需要调用提交函数(commit)生效
/// </summary>
public void StartTransation()
{
//若连接数据库失败抛出错误
if (!ConnectDataBase())
{
throw(new ApplicationException("没有建立数据库连接。"));
}

m_bTransaction = true;
m_sqlTransaction = m_sqlConnection.BeginTransaction(
IsolationLevel.ReadCommitted);
m_sqlCommand.Transaction = m_sqlTransaction;

}

/// <summary>
/// 当前待处理事务提交,失败全部回滚
/// <returns>成功提交返回true</returns>
public bool Commit()
{
//如果没有开启事务处理功能,不做任何操作,直接返回成功
if (!m_bTransaction)
{
return true;
}

try
{
m_sqlTransaction.Commit();
}
catch(SqlException e)
{
m_sqlTransaction.Rollback();
throw e;
}
return true;
}

/// <summary>
/// 除去对象资源.
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(true);
}

/// <summary>
/// 释放对象实例变量.
/// </summary>
protected virtual void Dispose(
bool bDispose)
{
if (!bDispose)
return;

if (m_bConnected)
{
if (m_sqlConnection.State != ConnectionState.Closed )
{
m_sqlConnection.Dispose();
m_sqlConnection.Close();

m_sqlCommand = null;
m_sqlConnection = null;
m_sqlTransaction = null;

m_bConnected = false;
}
}
}
}
}
antoniusguo 2007-07-26
  • 打赏
  • 举报
回复
MS最近的几个例子好象都是没存储过程的
qqhmitzk 2007-07-26
  • 打赏
  • 举报
回复
SQLHElper执行的都是什么存储过程,有执行SQL语句的没有,比如删除,更新等SQL单一的语句,而不是存储过程
bumm 2007-07-26
  • 打赏
  • 举报
回复
上网搜一下:Microsoft.ApplicationBlocks.Data
lovesnow1573 2007-07-26
  • 打赏
  • 举报
回复
namespace Utilities
{

/// <summary>
/// DbAccess类,即进行数据库访问时需要调用的类
/// </summary>
public class DbaseBS
{
//取出数据库连接字符串
public static readonly string conStr = ConfigurationSettings.AppSettings["ConnectionString"];

/// <summary>
/// 得到数据库连接对象
/// </summary>
/// <returns>数据库连接对象</returns>
public static SqlConnection GetConObject()
{
return new SqlConnection(conStr);
}

/// <summary>
/// 执行操作数据库的存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <returns>存储过程执行后所影响的行数</returns>
public static int ExecuteNonQuery(string procName)
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection con = GetConObject())
{
CreateCommand(cmd, con, null, procName,null);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}
}

/// <summary>
/// 执行操作数据库的存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="cmdParms">存储过程所使用的参数</param>
/// <returns>存储过程执行后所影响的行数</returns>
public static int ExecuteNonQuery(string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();

using (SqlConnection con = GetConObject())
{
CreateCommand(cmd, con, null, procName, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}
}

/// <summary>
/// 执行操作数据库的存储过程(事务控制)
/// </summary>
/// <param name="trans">数据库连接所关联的事务对象</param>
/// <param name="procName">存储过程名称</param>
/// <param name="cmdParms">存储过程所使用的参数</param>
/// <returns>存储过程执行后所影响的行数</returns>
public static int ExecuteNonQuery(SqlTransaction trans, string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
CreateCommand(cmd, trans.Connection, trans, procName, cmdParms);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.Dispose();
return val;
}

/// <summary>
/// 执行读数据集操作,以DataReader的形式返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="cmdParms">存储过程所使用的参数</param>
/// <returns>DataReader对象</returns>
public static SqlDataReader ExecuteReader(string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();

try
{
CreateCommand(cmd, con, null, procName, cmdParms);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr;
}
catch(Exception ex)
{
cmd.Dispose();
Close(con);
throw ex;
}
}

/// <summary>
/// 执行读数据集操作,以DataReader的形式返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <returns>DataReader对象</returns>
public static SqlDataReader ExecuteReader(string procName)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();

try
{
CreateCommand(cmd, con, null, procName, null);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return dr;
}
catch(Exception ex)
{
cmd.Dispose();
Close(con);
throw ex;
}
}

/// <summary>
/// 执行读数据集操作,以DataSet的形式返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="cmdParms">存储过程所使用的参数</param>
/// <returns>DataSet对象</returns>
public static DataSet ExecuteDataSet(string procName, SqlParameter[] cmdParms)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();
DataSet ds = new DataSet();

try
{
CreateCommand(cmd, con, null, procName, cmdParms);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
catch(Exception ex)
{
throw ex;
}
finally
{
cmd.Dispose();
Close(con);
}
}


/// <summary>
/// 执行读数据集操作,以DataSet的形式返回
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <returns>DataReader对象</returns>
public static DataSet ExecuteDataSet(string procName)
{
SqlCommand cmd = new SqlCommand();
SqlConnection con = GetConObject();
DataSet ds = new DataSet();

try
{
CreateCommand(cmd, con, null, procName, null);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
catch(Exception ex)
{
throw ex;
}
finally
{
cmd.Dispose();
Close(con);
}
}
}
SassyBoy 2007-07-26
  • 打赏
  • 举报
回复
里面的英文注释就是使用方法~~
SassyBoy 2007-07-26
  • 打赏
  • 举报
回复
还是SQLHelper~~好好学习一下吧~~
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...
源码链接: https://pan.quark.cn/s/a4b39357ea24 小程序雷达 AI 驱动的小程序生态选型与风险评估工具,把微信小程序开发资源转化为可筛选、可评估、可对比的技术雷达。 线上地址 主站: Vercel: 适合谁 正在做微信小程序技术选型的产品、研发和架构团队。 需要判断 Taro、uni-app、原生小程序、组件库、云开发和 SDK 风险的团队。 需要把历史 awesome 列表转成可筛选、可对比、可验证技术雷达的维护者。 可以做什么 Radar:按推荐状态、风险等级、资源型、分和适用场景浏览小程序生态资源。 Quick Search:快速搜索资源并跳转常用页面。 Compare:对比 Taro、uni-app、原生小程序等核心方案。 Advisor:输入选型问题,获得推荐结论、适用/不适用条件、迁移成本、下一步和证据来源。 Doctor:粘贴小程序项目配置,识别框架依赖、过时方案和迁移风险。 Weekly:查看小程序生态周报和近期风险信号。 数据概览 当前数据集中包含 236 个小程序生态资源。 完整资源可在 Radar 页面和导出能力中查看。 核心样例 Taro ★30.6k+ - 使用 React 的方式开发小程序的框架,同时支持生成多端应用 uni-app ★36.1k+ - 使用 Vue 语法开发小程序、H5、App的统一框架 MPX ★2.1k+ - 增强型小程序框架,深度性能优化,支持跨小程序平台开发,完全兼容原生小程序组件 WePY ★21.7k+ - 支持组件化的小程序开发框架 vant-weapp ★12.3k+ - 高颜值、好用、易扩展的微信小程序 UI 库 tdesign-miniprogram ★1.3...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧