昨天我妈打电话过来,问我最近是不是手机坏了,怎么好久没消息了=_=、、、(我妈经常用我姐的手机看我的空间动态和说说),其实当然不是手机坏了,而是实在不知道要说些什么,也就是词穷的意思。今天发给日志吧,证明哥尚在地球存活着,不喜勿喷~
晚上邱老师交给我一个活,就是把文本文档中的英语单词和对应的汉语意思录入到SQL数据库,文本文档的内容截图如下:
D:\psd.png
文档中的排版很整齐,这也为数据导入省了不少功夫
然后,新建一个名为Dictionary的数据库,然后新建一个表words,包含三个字段,id(int)自增,English,Chinese分别存储英语和汉语,数据库就是这样了。
接下来,新建一个控制台程序,在program.cs中编写代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SqlClient;
namespace 英汉词典
{
class Program
{
static void Main(string[] args)
{
List<string> listEng = new List<string>();
List<string> listChin = new List<string>();
string path = @"F:\英汉词典TXT格式.txt";
string[] dicText = File.ReadAllLines(path, Encoding.Default);
for (int i = 0; i < dicText.Length; i++)
{
string[] text = dicText.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
listEng.Add(text[0].ToString());
listChin.Add(text[1].ToString());
}
for (int i = 0; i < listChin.Count; i++)
{
Data.InsertData(listEng, listChin);
}
Console.WriteLine("导入完成!");
//Console.WriteLine(listEng.Count.ToString() + listChin.Count.ToString());
Console.ReadKey();
}
public class Data
{
public static void InsertData(string eng, string chi)
{
SqlConnection conn = new SqlConnection("server=.;database=English2Chinese;uid=sa;pwd=wangchunlei");
string sqlStr = "insert into Words(English,Chinese) values(@english,@chinese)";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
SqlParameter[] paras = {
new SqlParameter("@english",eng),
new SqlParameter("@chinese",chi)
};
cmd.Parameters.AddRange(paras);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
}
运行程序,即可将数据导入数据库,当然这些代码是存在一些问题的
(1)使用List<string>在数据遍历的时候分别通过Add()方法存储英语和汉语,在这个程序中并没有出现错误,但如果有某个英语单词和汉语意思只存在一个,那么就是导入录入的数据英语和汉语对应起来会出现错位,当然,在程序能正常跑起来的情况下。
(2) 数据导入函数 InsertData(),分别传入英语和汉语的两个string类型的参数,并在遍历的时候执行该方法。调用函数实现响应的功能体现了较好的封装性,但是在遍历的情况下多次执行该方法就存在一些执行速度的问题,因为每次执行都打开、关闭连接,接近八千个单词就要反复打开、关闭数据库八千次,你说能不慢吗?=_=、、、当然解决的办法也很简单,在执行函数之前将数据库打开,在遍历结束后再将连接关闭,这样只需要打开、关闭连接一次,自然就会更快些,只是对于这个数据导入的功能来说,我们只需要用一次,性能问题不考虑也罢了。 |