实现目标是给每一个人的籍贯定位,一张表是人名- 籍贯信息,籍贯为明清时的行政区划,另一张表为明- 清- 今- 今经纬度的知识库表,通过调用这两张表做连接,查看哪些古地名可通过第二张表定位,哪一些不能,不能的情况是否需要修改知识库。
数据库操作第一步:
连接数据库:
public static string StartPath = Application.StartupPath + @"/****.mdb";
// 该数据库包括前面提到的两张表,将其放在Debug 文件下
public static string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
public static string ConnectStr = ConnStr + " Data Source=" + StartPath;
public static OleDbConnection DataConnection = new OleDbConnection(ConnectStr);
选取数据库中需要的表(可根据需要通过修改SQL 语句进行筛选):
先建数据集DataSet ,从已有数据库中取内容,存储在它的表中。
DataSet objDataset = new DataSet("set");
//Form 中设计一文本框输入表名,****table.Text 为取其内容
string sqlStr = "select * from " + ****table.Text;
// 通过前面的连接DataConnection 连接数据库执行sqlStr
OleDbDataAdapter objAdapter = new OleDbDataAdapter(sqlStr, DataConnection);
//DataAdapter 的 Fill 方法用前面得到的内容填充数据集,并命名存储在表名为A 的表中。
objAdapter.Fill(objDataset, "A");
后面就可以进一步了解objdataset.Tables["A"] 的.Rows.Count 或者.Rows[i][j] 等具体信息了。
查询用的SQL 语句,在这里用的基本语句:
// 先定义OleDbCommand 类变量,进行连接
OleDbCommand sqlComm = new OleDbCommand();
sqlComm.Connection = DataConnection;
// 定义语句
sqlComm.CommandText = " CREATE TABLE MatchSuccess (ID VARCHAR(40), NAME VARCHAR(40),HOMETOWN_H VARCHAR(40), LAT VARCHAR(40),LON VARCHAR(40));";
// 执行语句
sqlComm.ExecuteNonQuery();
特别需要注意的是SQL 语句的写法。方法是先把语句写出来,然后根据那些是程序中提供的变量,将其提出到引号外面。
例如插入语句:
INSERT INTO 表名 ( 列名1, …,列名n)
VALUES( 值1 ,值2 ,…, 值n)
在程序中就是:
sqlComm.CommandText = "insert into MatchFalse (ID,SURNAME,NAME,HOMETOWN_H,KEJUINFOR) "
+ "values ('" + j.ToString() + "','" + surName + "','" + name + "','" + hisplaces + "','" + kejuInfor + "');";
该空格的地方空格不能少 ,例如:
string sqlStr = "select * from " + ****table.Text;
开始我写的是
string sqlStr = "select * from" + ****table.Text;
由于from 后面少了一个空格,它将from 与后面的text 一起读取,得不到表。