C#连接Bmob云数据库编写简单的窗体程序
今天的计划是编写一个c#窗体程序,用于保存自己收藏的网址,类似于网页收藏夹的功能。
Bmob后端云提供了简单便捷的云数据库,云函数以及短信邮件等服务,提供可靠的 Serverless云服务,轻松拥有开发中需要的各种后端能力
我们要使用Bmob,首先需要去Bmob官网进行注册,注册后点击我的控制台->应用key,将会看到四种密钥及其使用说明:
1.Application ID,SDK初始化必须用到此密钥
2.REST API Key,REST API请求中HTTP头部信息必须附带密钥之一
3.Secret Key,是SDK安全密钥,不可泄漏,在云函数测试云函数时需要用到
4.Master Key,超级权限Key。应用开发或调试的时候可以使用该密钥进行各种权限的操作,此密钥不可泄漏
在C#窗体程序中我们要用到的是Application ID和REST API Key
我选择的C#编译器是vs2017,打开VS2017,
文件->新建->项目,选择Visual c#下的Windows桌面,选择右侧Windows 窗体应用,输入名称,选择程序位置,一个窗体应用程序就创建完成了.
接下来我们需要下载安装SDK
Bmob C# SDK下载地址:https://github.com/bmob/BmobSharp/releases
下载后解压,将Windows文件夹下的Bmob-Windows.dll文件引用到你的项目工程中,如下图所示
新建模型类
要想对Bmob云端的数据进行操作,需要创建和数据表对应的模型类。在Bmob中,模型类需要继承自BmobTable,具体类的实现如下
public class WebFav : BmobTable
{
private String ftable;
public BmobInt seq;
public String webname;//收藏网址的备注名
public String weburl;//收藏网址的URL
public WebFav()
{
}
public WebFav(String TableName)
{
this.ftable = TableName;
}
public override string table
{
get
{
if (ftable != null)
{
return ftable;
}
return base.table;
}
}
//读字段信息
public override void readFields(BmobInput input)
{
base.readFields(input);
this.seq = input.getInt("seq");
this.webname = input.getString("webname");
this.weburl = input.getString("weburl");
}
//写字段信息
public override void write(BmobOutput output, bool all)
{
base.write(output, all);
output.Put("seq", this.seq);
output.Put("webname", this.webname);
output.Put("weburl", this.weburl);
}
}
在正式对Bmob后端云进行操作之前,需要先初始化AppKey以及RestKey信息,也就是注册完成后获取的Application ID/RestKey信息
Bmob的初始化可以放在窗体的初始化方法“InitTh()"中,实现代码如下。
bmob = new BmobWindows();
//Bmob初始化,参数填写自己的Application ID和REST Key
bmob.initialize("Application ID", "REST Key");
//注册调试工具
BmobDebug.Register(msg => { Debug.WriteLine(msg); });
接下来进行窗体的设计编写
因为简单,所以整个窗体程序我只打算使用一个Form,整体设计思想如下:
用一个ComboBox来展示已经收藏的网址信息
用两个TextBox分别用于输入要收藏的网址以及网址备注名
加入几个Label和Button进行功能的细化
整体外观如下:
接下来讲一下程序具体的实现操作
一、加载收藏网页
我们从Bmob云数据库进行收藏的网址的载入,我们定义一个数组(链表也可以)用于存放加载到的网址信息,以便在当前程序调用中不需每次调用Bmob数据库
public string[] record = new string[200];//记录收藏网页信息
在从Bmob云端数据库访问数据时,我们还需要考虑到没有网络连接的情况(事实上,没有网络连接,就算打开了收藏夹,用处也不大),我们可以在没有网络连接的时候,从本地文件载入上次保存在本电脑上的收藏网址。具体代码如下:
//访问数据库
public void loadRecord()
{
comboboxRecord.Items.Clear();//将ComboBox清空
int x = 0;
var query = new BmobQuery();
query.Count();
bmob.Find<WebFav>("WebFav", query, (resp, exception) =>
{
if(exception==null)//没有异常发生,访问成功
{
List<WebFav> lists = resp.results;
for(int i=0;i<lists.Count;i++)//将收藏网址的信息存入record数组中
{
record[2*i] = lists[i].webname;
record[2*i + 1] = lists[i].weburl;
}
x = lists.Count;
num = x;
record[2 * x] = "#";
label5.Visible = false;
for (int i = 1; i <= x; i ++)
{
comboboxRecord.Items.Add(Convert.ToString(i) + "." + record[(i-1)*2]);
}
//保存网址信息到本地
saveWeb();
}
else
{
loadFromFile();//发生异常,从本地文件载入
// MessageBox.Show("从本地文件载入");
}
});
loadFromFile()用于从本地文件载入网址信息
public void loadFromFile()
{
comboboxRecord.Items.Clear();
int x = 0;
try
{
//读取文件
StreamReader sr = new StreamReader(path,Encoding.UTF8);
string result = sr.ReadLine();
while (result != null)
{
record[x++] = result;
result = sr.ReadLine();
}
sr.Close();
//MessageBox.Show(x.ToString());
for (int i = 1; i < x; i+=2)
{
comboboxRecord.Items.Add(Convert.ToString((i+1)/2)+"."+record[i]);
}
}
catch (Exception ex)
{
}
}
saveWeb()用于保存网址信息到本地
public void saveWeb()
{
//写入到文件
StreamWriter sw = new StreamWriter(path,false);
for(int i=0;i<num;i++)
{
sw.WriteLine(record[i * 2+1]);
sw.WriteLine(record[2*i]);
}
sw.Close();
}
二、新增收藏网址
在两个TextBox的内容输入完成后,点击添加按钮,就可以将数据上传到Bmob数据库中
private void buttonADD_Click(object sender, EventArgs e)
{
if(textBoxURL.Text!=string.Empty)
{
try
{
webFav = new WebFav("WebFav");
webFav.weburl = textBoxURL.Text;
if (textBoxName.Text != string.Empty)//备注名为空时,备注名默认为网址
{
webFav.webname = textBoxName.Text;
}
else
{
webFav.webname = webFav.weburl;
}
bmob.Create("WebFav", webFav, (resp, exception) => {
if (exception != null)
{
MessageBox.Show("添加失败,检查网络连接");
}
else
{
loadRecord();//添加了网址,需要重新加载
textBoxName.Clear();
textBoxURL.Clear();
// MessageBox.Show("添加成功!");
}
});
}
catch(Exception ex)
{
}
}
}
三、补充细节
原始窗体的界面会比较简单,可以考虑:
更改背景,修改Form的BackgroudImage属性进行更改
更改窗体图标,右键项目名称,选择属性,选择应用程序,点击浏览,更换图标
增加日期时间功能,在组件中找到Timer,拉入窗体中,设置Interval属性为500(毫秒),计时器时间中编写代码,让时间每隔500毫秒刷新,字体颜色也随之发生变化
private void timer1_Tick(object sender, EventArgs e)
{
int red = r.Next(256);//r = new Random()
int green = r.Next(256);
int blue = r.Next(256);
labelTime.ForeColor = Color.FromArgb(red, green, blue);
labelTime.Text = DateTime.Now.ToString();
}
四、网址跳转
增加一个Button,当在ComboBox中选中网址时,可以进行调用系统默认浏览器进行打开网页
private void button1_Click(object sender, EventArgs e)
{
int x = (int)comboboxRecord.SelectedIndex;//获取ComboBox选取项目的索引
if(x>=0)//x=-1时,表明未选中
{
Process.Start(record[2*x+1]);//调用系统默认浏览器进行打开网页
}
}
五、手动同步
加入新的Button,用于手动调用loadRecord(),进行手动同步
private void button2_Click(object sender, EventArgs e)
{
loadRecord();
}
至此,一个简单的C#使用Bmob数据库的窗体程序就完成了。
感谢!