由于管理需要,公司决定上一套信息管理系统,将原来的用Excel所做的记录用管理系统来管理。通过努力,我终于作了一套类似《牛腩新闻发布系统》的客户信息管理系统。可原来的Excel中的数据该如何导入到新的系统中呢。通过两天的不断研习我终于搞定。
我所用的数据库是基于SQL Server 2005 Express版的,用SQL Server Management Studio Express来管理。数据库结构见图
,
其中各个表的说明见图
,公司现在所用的Excel数据见图
。
首先要做的是将Excel表导入到SQL Server 2005下。我先将Excel导入到Access中,再将Access数据库导入到SQL Server 2000中,然后将SQL Server 2000中的数据库做备份,最后再在SQL Server 2005 Express将数据库还原。最终得到SQL Server 2005中的数据库nbk,表名userinfo,表中的字段有:
id(编号) date(安装日期) name(客户姓名) address(地址) telphone(电话) model(机型) amount(数量) acmodel(配件) inname(安装工姓名)
剩下的工作就是要在VS中(我用的是VWD 2008 Express Edition)将库nbk中的数据导入到数据库yuajiasys中。
准备工作:
为了能够看到出错信息,首先打开web.config文件,将其中的容错处理语句,也就是<customErrors mode="On" defaultRedirect="~\error.htm"></customErrors>一行删除。
我原来所用的SQLHelper.cs(在DAL层)代码如下:
此方法是用来操作数据库yuajiasys的。为了能够操作数据库nbk,我将SQLHelper复制了一份,命名为SQLHelper1,代码除了将SQLHelper改为SQLHelper1之外,只有一个地方要修改,那就是连接字符串,与nbk建立连接的字符串的写法:string connStr = @"server=PC2009080519VDZ\SQLEXPRESS;database=nbk;uid=sa;pwd=123456";改好之后要对DAL进行“重新生成”。
真正操作数据的过程:
新建一个网页copydata,前台什么也不用做,直接处理代码。具体过程如下:
一、从数据库nbk中查出所有的机型类别名称并加入到数据库yuajiasys的类别表category中。
直接在页面的Page_Load事件中写,具体代码:
二、添加主表记录
将第一步中的代码注释掉,添加如下代码:
往客户信息表加添加数据的方法
实体类UserInfo.cs的代码:
说明:由于有两个与数据库的链接存在,在运行过程中会出错,好像是链接池的问题,我不太懂。我的解决办法是不断的修改循环的起始值和结束值,直止将数据全部写完。关于这点,哪位网友有好的解决办法,希望能与之交流。另外,代码中用到一些自己写的操作数据库的方法,如有不明之处,建议看看视频《牛腩新闻发布系统》。
写的比较乱,主要是讲一种思路,有不懂的地方,欢迎与本人联系交流。QQ:747386679。
我所用的数据库是基于SQL Server 2005 Express版的,用SQL Server Management Studio Express来管理。数据库结构见图

其中各个表的说明见图


首先要做的是将Excel表导入到SQL Server 2005下。我先将Excel导入到Access中,再将Access数据库导入到SQL Server 2000中,然后将SQL Server 2000中的数据库做备份,最后再在SQL Server 2005 Express将数据库还原。最终得到SQL Server 2005中的数据库nbk,表名userinfo,表中的字段有:
id(编号) date(安装日期) name(客户姓名) address(地址) telphone(电话) model(机型) amount(数量) acmodel(配件) inname(安装工姓名)
剩下的工作就是要在VS中(我用的是VWD 2008 Express Edition)将库nbk中的数据导入到数据库yuajiasys中。
准备工作:
为了能够看到出错信息,首先打开web.config文件,将其中的容错处理语句,也就是<customErrors mode="On" defaultRedirect="~\error.htm"></customErrors>一行删除。
我原来所用的SQLHelper.cs(在DAL层)代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace DAL { public class SQLHelper { private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; public SQLHelper() { string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; conn = new SqlConnection(connStr); } private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; } public int ExecuteNonQuery(string sql, CommandType ct) { int res; try { cmd = new SqlCommand(sql, GetConn()); cmd.CommandType = ct; res = cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); } } return res; } public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(cmdText, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; } public DataTable ExecuteQuery(string cmdText, CommandType ct) { cmd = new SqlCommand(cmdText, GetConn()); DataTable dt = new DataTable(); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct) { cmd = new SqlCommand(cmdText, GetConn()); cmd.CommandType = ct; DataTable dt = new DataTable(); cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } } }
此方法是用来操作数据库yuajiasys的。为了能够操作数据库nbk,我将SQLHelper复制了一份,命名为SQLHelper1,代码除了将SQLHelper改为SQLHelper1之外,只有一个地方要修改,那就是连接字符串,与nbk建立连接的字符串的写法:string connStr = @"server=PC2009080519VDZ\SQLEXPRESS;database=nbk;uid=sa;pwd=123456";改好之后要对DAL进行“重新生成”。
真正操作数据的过程:
新建一个网页copydata,前台什么也不用做,直接处理代码。具体过程如下:
一、从数据库nbk中查出所有的机型类别名称并加入到数据库yuajiasys的类别表category中。
直接在页面的Page_Load事件中写,具体代码:
string conncategory = "select distinct [model] from userinfo order by [model]"; DataTable camodel = new SQLHelper1().ExecuteQuery(conncategory, CommandType.Text); string model; for (int i = 0; i < camodel.Rows.Count; i++) { model = camodel.Rows[i]["model"].ToString(); new CategroyManager().Insert(model); //调用往类别名称表加添加数据的方法 } …… //往类别名称表加添加数据的方法 public bool Insert(string Model) { bool flag = false; string sql = "insert into category(Model) values(@Model)"; SqlParameter[] paras = new SqlParameter[]{ new SqlParameter("@Model",Model) }; int res=sqlhelper.ExecuteNonQuery(sql,paras,CommandType.Text); if (res>0) { flag = true; } return flag; }
二、添加主表记录
将第一步中的代码注释掉,添加如下代码:
string conninfo = "select * from userinfo order by date"; DataTable dtinfo = new SQLHelper1().ExecuteQuery(conninfo,CommandType.Text); UserInfo usinfo = new UserInfo(); //UserInfo是客户信息实体类 for (int i = 0; i < dtinfo.Rows.Count; i++) //根据界面的错误提示,不断修改执行循环的起始值和结束值,至到将数据全部复制完成。一次循环不应超过100 { string caid = dtinfo.Rows[i]["model"].ToString(); switch (caid) { case "大众175升": caid="1"; break; case "大众180升": caid = "2"; break; case "大众210升": caid = "3"; break; case "大众240升": caid = "4"; break; case "大众300升": caid = "5"; break; case "冬傲180升": caid = "6"; break; case "冬傲210升": caid = "7"; break; case "冬傲240升": caid = "8"; break; case "冬傲300升": caid = "9"; break; case "富康200升": caid = "10"; break; case "富康240升": caid = "11"; break; case "富康300升": caid = "12"; break; case "富康420升": caid = "13"; break; case "金刚240升": caid = "14"; break; case "金刚300升": caid = "15"; break; case "金刚360升": caid = "16"; break; case "金刚420升": caid = "17"; break; case "我爱我家150": caid = "18"; break; case "我爱我家155": caid = "19"; break; case "我爱我家175": caid = "20"; break; case "我爱我家180": caid = "21"; break; case "我爱我家210": caid = "22"; break; case "我爱我家240": caid = "23"; break; case "小神童300升": caid = "24"; break; case "阳光300升": caid = "25"; break; case "粤佳200升": caid = "26"; break; case "粤佳240升": caid = "27"; break; case "粤佳300升": caid = "28"; break; case "粤佳360升": caid = "29"; break; default: caid = "12"; //设为富康300升所对应的ID号 break; } usinfo.UserName = dtinfo.Rows[i]["name"].ToString().Trim(); usinfo.UserAddress = dtinfo.Rows[i]["address"].ToString().Trim(); usinfo.UserTelephone = dtinfo.Rows[i]["telphone"].ToString().Trim(); usinfo.CaId = caid; usinfo.InstallationDate = dtinfo.Rows[i]["date"].ToString().Trim(); usinfo.Amount = dtinfo.Rows[i]["amount"].ToString().Trim(); usinfo.AccessoriesModel = dtinfo.Rows[i]["acmodel"].ToString().Trim(); usinfo.InstallationName = dtinfo.Rows[i]["inname"].ToString().Trim(); usinfo.Notes = ""; new UserInfoManager().Insert(usinfo); } ……
往客户信息表加添加数据的方法
/// <summary> /// 添加新记录 /// </summary> /// <param name="user">客户信息实体类</param> /// <returns></returns> public bool Insert(UserInfo user) { bool flag = false; string cmdText = "UserInfo_Insert"; SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@userName",user.UserName), new SqlParameter("@userAddress",user.UserAddress), new SqlParameter("@userTelephone",user.UserTelephone), new SqlParameter("@caId",user.CaId), new SqlParameter("@installationDate",user.InstallationDate), new SqlParameter("@amount",user.Amount), new SqlParameter("@accessoriesModel",user.AccessoriesModel), new SqlParameter("@installationName",user.InstallationName), new SqlParameter("@notes",user.Notes) }; int res = sqlhelper.ExecuteNonQuery(cmdText,paras,CommandType.StoredProcedure); if (res>0) { flag = true; } return flag; }
实体类UserInfo.cs的代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Model { public class UserInfo { private string id; private string userName; private string userAddress; private string userTelephone; private string caId; private string installationDate; private string amount; private string accessoriesModel; private string installationName; private string notes; public string Id { get { return id; } set { id = value; } } public string UserName { get { return userName; } set { userName = value; } } public string UserAddress { get { return userAddress; } set { userAddress = value; } } public string UserTelephone { get { return userTelephone; } set { userTelephone = value; } } public string CaId { get { return caId; } set { caId = value; } } public string InstallationDate { get { return installationDate; } set { installationDate = value; } } public string Amount { get { return amount; } set { amount = value; } } public string AccessoriesModel { get { return accessoriesModel; } set { accessoriesModel = value; } } public string InstallationName { get { return installationName; } set { installationName = value; } } public string Notes { get { return notes; } set { notes = value; } } public UserInfo() { } public UserInfo(string id,string userName,string userAddress,string userTelephone,string caId,string installationDate,string amount,string accessoriesModel,string installationName,string notes) { this.id = id; this.userName = userName; this.userAddress = userAddress; this.userTelephone = userTelephone; this.caId = caId; this.installationDate = installationDate; this.amount = amount; this.accessoriesModel = accessoriesModel; this.installationName = installationName; this.notes = notes; } public UserInfo(string userName, string userAddress, string userTelephone, string caId,string installationDate, string amount, string accessoriesModel, string installationName, string notes) { this.userName = userName; this.userAddress = userAddress; this.userTelephone = userTelephone; this.caId = caId; this.installationDate = installationDate; this.amount = amount; this.accessoriesModel = accessoriesModel; this.installationName = installationName; this.notes = notes; } } }
说明:由于有两个与数据库的链接存在,在运行过程中会出错,好像是链接池的问题,我不太懂。我的解决办法是不断的修改循环的起始值和结束值,直止将数据全部写完。关于这点,哪位网友有好的解决办法,希望能与之交流。另外,代码中用到一些自己写的操作数据库的方法,如有不明之处,建议看看视频《牛腩新闻发布系统》。
写的比较乱,主要是讲一种思路,有不懂的地方,欢迎与本人联系交流。QQ:747386679。
发表评论
-
ASP.net把datatable与list转成json输出
2014-12-10 12:02 836源代码: //DataTable转成Json ... -
开发问题集锦
2014-09-18 16:45 7261.SWFUpload问题 "触发uploadErr ... -
repeater嵌套使用
2014-09-16 18:38 794前台: <div id="m ... -
ASP.NET环境下使用KindEditor
2013-11-26 16:46 2918最新版的KindEditor,按照在线文档http://www ... -
ASP.NET+jQuery轮播效果
2013-08-21 08:03 2879<style type="text/css&q ... -
ASP.NET与Sql Server数据库的空数据的交互
2013-08-02 22:55 1015数据库中的字段:(1) ArticleId int型 外键 可 ... -
设置网页的Title、keywords和description
2013-03-20 15:35 883protected void Page_Load(obje ... -
再谈<<在ASP.NET中重写URL>>
2013-02-20 09:17 904将之前的<<在ASP.NET中重写URL>& ... -
VS2010母版版引入js和css文件
2012-10-31 17:15 890动态引入js文件和css样式表文件 1 引入js文件 Ht ... -
.NET网站中利用jQuery Ajax获取后台数据
2011-12-19 11:59 3364一般处理程序 using System.Web.Script. ... -
解决:Sys.WebForms.PageRequestManagerServerErrorException(status code 500 OR 12031)
2011-12-09 10:21 1288解决:Sys.WebForms.PageRequestMana ... -
在ASP.NET中重写URL
2011-12-08 18:02 768目标:将网页地址伪静态 实现:在Global.asax中改写: ... -
ashx文件使用Session(转)
2011-12-02 11:25 868查阅MSDN得到ashx文件要使用Session,必须实现Se ... -
作品展示
2011-11-05 16:27 880刚开发完成 看一下效果 [img][/img] ... -
ASP.NET上传大文件
2011-10-27 17:20 4039上网下一个neatupload 1.2.32的压缩包:(附压缩 ... -
asp .NET弹出窗口汇总(转)
2011-08-16 09:39 629注: //关闭,父窗口弹出对话框,子窗口直接关闭 this ... -
精通ASP.NET中弹出窗口技术(转)
2011-08-16 09:36 933摘要:本文讨论如 ... -
asp.net中的验证控件的使用
2010-04-07 16:35 1027前台: <h4>验证控件使用测试< ... -
.net利用AJAX实现局部刷新
2010-04-07 16:30 3361前台: <div> ... -
一个SQL Server2000和2005都能用的分页方法
2010-04-07 16:25 1045(1)存储过程(SQL2000和2005下都可用): ...
相关推荐
这篇教程“C#数据库教程6-ADO.NET用户数据导入数据库的几种类型”将详细介绍如何利用C#和ADO.NET框架处理不同类型的用户数据导入到SQL Server数据库的过程。以下是对这些知识点的详细讲解: 一、文本数据导入数据库...
详细介绍如何将ASP.NET应用程序与SQL Server数据库进行连接,实现更复杂的数据操作。 - **示例005**:Session状态管理。解释Session的工作原理及其在ASP.NET中的使用方法,帮助开发者了解如何维护用户会话状态。 -...
在全球建筑行业不断追求节能与智能化发展的浪潮中,变风量(VAV)系统市场正展现出蓬勃的发展潜力。根据 QYResearch 报告出版商的深入调研统计,预计到 2031 年,全球变风量(VAV)系统市场销售额将飙升至 1241.3 亿元,在 2025 年至 2031 年期间,年复合增长率(CAGR)为 5.8%。这一令人瞩目的数据,不仅彰显了 VAV 系统在当今建筑领域的重要地位,更预示着其未来广阔的市场前景。 变风量系统的起源可追溯到 20 世纪 60 年代的美国。它犹如建筑空调系统中的 “智能管家”,能够敏锐地感知室内负荷或室内所需参数的变化,通过维持恒定的送风温度,自动、精准地调节空调系统的送风量,从而确保室内各项参数始终满足空调系统的严格要求。从系统构成来看,变风量系统主要由四个基本部分协同运作。变风量末端设备,包括 VAV 箱和室温控制器,如同系统的 “神经末梢”,负责接收室内环境变化的信号并做出初步响应;空气处理及输送设备则承担着对空气进行净化、加热、冷却等处理以及高效输送的重任;风管系统,涵盖新风、排风、送风、回风等管道,构建起了空气流通的 “高速公路”;而自动控制系统宛
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
内容概要:本文探讨了ChatGPT这种高级语音模式的人工智能聊天机器人与用户的互动对其情绪健康的影响。研究采用了两种互补的方法:大规模平台数据分析和随机对照试验(RCT)。平台数据部分通过对超过400万次对话进行隐私保护的大规模自动化分析以及对4000多名用户的调查,揭示了高频率使用者表现出更多的情感依赖和较低的社会交往意愿。RCT部分则通过近1000名参与者为期28天的研究,发现语音模型相较于文本模型能带来更好的情绪健康效果,但长时间使用可能导致负面后果。此外,初始情绪状态较差的用户在使用更具吸引力的语音模型时,情绪有所改善。 适合人群:对人机交互、情感计算和社会心理学感兴趣的科研人员和技术开发者。 使用场景及目标:本研究旨在为AI聊天机器人的设计提供指导,确保它们不仅能满足任务需求,还能促进用户的心理健康。同时,也为政策制定者提供了关于AI伦理使用的思考。 其他说明:研究强调了长期使用AI聊天机器人可能带来的复杂心理效应,特别是对于那些已经感到孤独或社交孤立的人来说,过度依赖可能会加剧这些问题。未来的研究应该更加关注这些极端情况下的用户体验。
Java 反射(Reflection)是一种强大的机制,允许程序在运行时检查和操作类的成员变量和方法。然而,传统的 `setAccessible(true)` 方式虽然便捷,但存在安全性问题,并且性能相对较低。在 Java 7 引入 `MethodHandle` 后,我们可以通过 `MethodHandles.Lookup.findVirtual()` 提供更优雅、高效的方式来访问对象属性。本文将对比这两种反射方式,并分析它们的优缺点。
loongdomShop.tar.gz
内容概要:本文探讨了不同交互模式(文本、中性语音、吸引人语音)和对话类型(开放式、非个人化、个人化)对聊天机器人使用者的心理社会效果(如孤独感、社交互动、情感依赖、不当使用)的影响。研究表明,在初期阶段,语音型聊天机器人比文本型更能缓解孤独感并减少情感依赖,但随着每日使用时间增加,这种优势逐渐消失,尤其是对于中性语音聊天机器人。此外,个人话题对话略微增加了孤独感,而非个人话题则导致更高的情感依赖。总体而言,高频率使用聊天机器人的用户表现出更多的孤独感、情感依赖和不当使用,同时减少了真实人际交往。研究还发现,某些个体特征(如依恋倾向、情绪回避)使用户更容易受到负面影响。 适合人群:心理学家、社会学家、人工智能研究人员以及关注心理健康和人机交互的专业人士。 使用场景及目标:①帮助理解不同类型聊天机器人对用户心理健康的潜在影响;②为设计更健康的人工智能系统提供指导;③制定政策和规范,确保聊天机器人的安全和有效使用。 其他说明:研究强调了进一步探索聊天机器人管理情感内容而不引发依赖或替代人际关系的重要性,呼吁更多跨学科的研究来评估长期影响。
MP4575GF-Z MP4575 TSSOP-20 降压型可调DC-DC电源芯片
界面设计_SwiftUI_习惯养成_项目管理_1742850611.zip
免安装版的logic软件包。支持波形实时查看。内含驱动文件。
1. **系统名称**:学生毕业离校系统 2. **技术栈**:Java技术、MySQL数据库、Spring Boot框架、B/S架构、Tomcat服务器、Eclipse开发环境 3. **系统功能**: - **管理员功能**:首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理。 - **学生功能**:首页、个人中心、费用结算管理、论文审核管理、我的收藏管理。 - **教师功能**:首页、个人中心、学生管理、离校信息管理、费用结算管理、论文审核管理。
配套文章:https://blog.csdn.net/gust2013/article/details/139608432
蓝凌OA系统V15.0管理员手册
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
mips-gcc520-glibc222编译工具链.zip
app开发
内容概要:本文档详细介绍了Swift编程语言的基础知识,涵盖语言特点、基础语法、集合类型、控制流、函数定义、面向对象编程、可选类型、错误处理、协议与扩展以及内存管理等方面的内容。此外还简要提及了Swift与UIKit/SwiftUI的关系,并提供了进一步学习的资源推荐。通过这份文档,读者可以全面了解Swift的基本概念及其在iOS/macOS/watchOS/tvOS平台的应用开发中的使用方法。 适合人群:初学者或者希望从其他编程语言转向Swift的开发者。 使用场景及目标:帮助读者快速上手Swift编程,掌握其基本语法和特性,能够独立完成简单的程序编写任务,为进一步学习高级主题如并发编程、图形界面设计打下坚实的基础。 阅读建议:由于Swift是一门现代化的语言,拥有许多独特的特性和最佳实践方式,在学习过程中应当多加练习并尝试理解背后的原理。同时利用提供的官方文档和其他辅助材料加深印象。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。