补充一下前面没记录的C#的语法。
懒得抄书了,把大作业的边边角角拉出来做例子,简要说明一下。以后直接copy当模板用。
说明 大作业是喜闻乐见的教务管理系统。
任务书要求用数据库。我按照课本用的微软的SQL Server,由于考虑到答辩与提交打分等原因,尽量做好环境的可迁移性,即换一台电脑也能正常跑程序。
数据库 我本想直接用远程数据库,在服务器上开一个sql server的1433端口直连。
至于安装,服务器是CentOS,第一次在linux上用SQL Server,全程看的教程:
centos7.x中安装SQL
教程很详细。最后服务也成功绿了。本地成功连接,但是出乎意料的,服务器宕机了。。。
SQLServer太吃内存了,负载拉满。
然后就想到迁移为mysql。毕竟mysql不怎么吃资源。
迁移过程出了点小岔子。数据导出的SQL脚本在mysql跑出了Error,SQLServer和mysql在语法上有点小出入。例如自增主键,在SQLServer里为 primary key identity(1,1)
,表示从1开始,步长为1;而mysql里为 primary key auto_increment
,还有编码等等若干小问题,要修改以来也挺麻烦的。
懒得处理了。干脆把导出的脚本给老师自己弄去,照着建个SqlServer数据库,然后本地连接就能跑了。
注意,user+pwd的方式连接SQL Server时需要设置项目:
开启SQL Server身份验证:
登陆用户授权:
设置密码,也选强制密码策略:
打包 关于程序打包,用的Visual Studio里的一个插件:
Microsoft Visual Studio Installer Projects
学校的机子环境:.NET 4.5.2
程序开发环境: .NET 4.7.2
使用注意:
打包程序本身也是.NET Framework框架依赖,所以选择打包程序本身的框架版本尤为重要,否则在旧机子上安装程序时会因为缺少最新版本的.NET Framework而无法运行。
生成一个msi文件和exe文件,复制msi,提交作业。
文件读写 由于是直接安装程序,又没有远程数据库。那么连接数据库是个问题。本地数据库名和密码要和程序里的ConnectionString一致,临时改来改去也麻烦。
想了个很傻的办法:在程序第一次启动时新建一个配置文件,专门用来连数据库的,连接成功后保存文件,以后每次启动连库时从文件里读取就好了。
这个办法在实际项目中很蠢,但是临时交个作业问题不大。
代码 登陆窗口(文件读) 程序的登陆窗口添加Load事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 private void Login_Load (object sender, EventArgs e ) { string path = @"C:\Program Files\manager" ; if (Directory.Exists(path) != true ) { Directory.CreateDirectory(path); } path = @"C:\Program Files\manager\manager.conf" ; FileStream fs = null ; BinaryReader reader = null ; try { fs = new FileStream(path, FileMode.OpenOrCreate); reader = new BinaryReader(fs); reader.BaseStream.Seek(0 , SeekOrigin.Begin); string conn = reader.ReadString(); connectionString = conn; } catch { reader.Close(); fs.Close(); MessageBox.Show("无法读取配置文件" ); if (connectionString == null || connectionString.Trim() == "" ) { config config = new config(); config.ShowDialog(); } } reader.Close(); fs.Close(); try { SqlConnection conn = new SqlConnection(connectionString); conn.Open(); conn.Close(); } catch { MessageBox.Show("连接失败" ); config config = new config(); config.ShowDialog(); } }
登陆窗口(文件写)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.SqlClient;using System.IO;namespace test1 { public partial class config : Form { public config ( ) { InitializeComponent(); } private void button1_Click (object sender, EventArgs e ) { string path = @"C:\Program Files\manager\manager.conf" ; string uid = textBox1.Text.Trim(); string pwd = textBox2.Text.Trim(); string initial = textBox3.Text.Trim(); string source = textBox4.Text.Trim(); string connectionString = "uid=" + uid + ";pwd=" + pwd + ";initial catalog=" + initial + ";data source=" + source + ";Timeout = 900;" ; Console.WriteLine(connectionString); try { SqlConnection conn = new SqlConnection(connectionString); conn.Open(); conn.Close(); } catch { MessageBox.Show("连接失败,请检查输入" ); } FileStream fs = null ; BinaryWriter writer = null ; try { fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); writer = new BinaryWriter(fs); writer.BaseStream.Seek(0 , SeekOrigin.Begin); writer.Write(connectionString); } catch (Exception ex) { MessageBox.Show("文件保存出错" + ex.Message); } writer.Close(); fs.Close(); Login.connectionString = connectionString; Close(); } } }