现有一个access数据库由其它后台程序每分钟增加一条记录。在我的程序中我写了委托想实现每分钟执行一次查询以获取最新的一条记录(60秒执行一次Getsql()),每次启动程序后的第一次查询数据没问题,但是后面查询出来的还是第一次的数据,不是最新数据。sql语句拿到access中去手动测试是没问题的,我是初学者现在完全没有头绪了,求大神帮帮忙啊
public void Getsql(string F)
{
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\bin\Debug\CBmonitor.mdb");
conn.Open();
var ds_test = new DataSet();
string sql_test = "SELECT top 1 CB_current,Tempeture,Abrasion,CB_voltage,Time FROM CB" + F + "_minfo order by ID desc;";
var adt = new OleDbDataAdapter(sql_test, conn);
adt.Fill(ds_test);
conn.Close();
conn.Dispose();
}
每分钟向数据库插数据,同时,你要每分钟执行查询操作。然后绑定控件
adt.Fill(ds_test);
dataGridView1.Datasource = ds_test.Tables[0];
加上一个绑定的代码看看
你查询数据 确保在插入数据之后再操作
这是之前写的一个c#管理程序,你可以看看,连接access数据库的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.OleDb;
namespace EducationalManage
{
class Program
{
public static bool outValues(DataSet ds)//实现遍历DataSet
{
string []str = new string [8];
int i=0;
bool ret = false;
foreach(DataTable outtable in ds.Tables)//编历(DataSet)数据表
{
foreach(DataRow outdr in outtable.Rows)//遍历(DataRow)数据行
{
i = 0;
foreach (DataColumn outdcol in outtable.Columns)//遍历(DataColumn)数据列
{
if (!ret)
{
Console.WriteLine("学号 姓名 年龄 院系 班级 入学年份 加权分均 状况");
ret = true;
}
if (i == 0 || i == 5 || i == 6) Console.Write("{0,-10}", outdr[outdcol]);
else if (i == 1 || i == 4) Console.Write("{0,-8}", outdr[outdcol]);
else if (i == 2) Console.Write("{0,-6}", outdr[outdcol]);
else if (i == 3) Console.Write("{0,-16}", outdr[outdcol]);
else Console.Write("{0}", outdr[outdcol]);
i++;
}
Console.WriteLine();
}
}
return ret;
}
public static void search(OleDbConnection conn)
{
OleDbDataAdapter myAdapter;
DataSet myDataSet;
string selectCmd;
int k = 1;
string str,str2;
while (k == 1)
{
Console.Clear();
Console.WriteLine("************************");
Console.WriteLine("学生查询");
Console.WriteLine("1->查询毕业生");
Console.WriteLine("2->查询退学学生");
Console.WriteLine("3->根据院系查询");
Console.WriteLine("4->根据班级查询");
Console.WriteLine("0->返回");
Console.WriteLine("************************");
Console.Write("请选择:");
str = Console.ReadLine();
switch (str)
{
case "1":
selectCmd =
"SELECT * FROM PERSON WHERE 状况 = '毕业'";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "2":
selectCmd =
"SELECT * FROM PERSON WHERE 状况 = '退学'";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "3":
Console.Write("请输入院系:");
str = Console.ReadLine();
selectCmd =
"SELECT * FROM PERSON WHERE 院系 = '" +
str.Replace("'", "''") + "'";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "4":
Console.Write("请输入院系:");
str = Console.ReadLine();
Console.Write("请输入班级:");
str2 = Console.ReadLine();
selectCmd =
"SELECT * FROM PERSON WHERE 院系 = '" +
str.Replace("'", "''") + "' and 班级 = '" +
str2.Replace("'", "''") + "'";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "0":
k = 0;
Console.WriteLine("按回车返回");
break;
default:
Console.WriteLine("输入错误,请重新选择");
conn.Close();
break;
}
Console.ReadKey();
}
}
public static void statistics(OleDbConnection conn)
{
OleDbDataAdapter myAdapter;
DataSet myDataSet;
string selectCmd;
int k = 1;
int year;
string str, str2;
while (k == 1)
{
Console.Clear();
Console.WriteLine("************************");
Console.WriteLine("统计成绩");
Console.WriteLine("1->院系排名");
Console.WriteLine("2->班级排名");
Console.WriteLine("3->加权不足70的学生");
Console.WriteLine("0->返回");
Console.WriteLine("************************");
Console.Write("请选择:");
str = Console.ReadLine();
switch (str)
{
case "1":
Console.Write("请输入院系:");
str = Console.ReadLine();
Console.Write("请输入入学年份:");
year = Convert.ToInt32(Console.ReadLine());
selectCmd =
"SELECT * FROM PERSON WHERE 院系 = '" +
str.Replace("'", "''") + "' and 入学年份 =" +year+ " ORDER BY 加权平均分 DESC";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "2":
Console.Write("请输入院系:");
str = Console.ReadLine();
Console.Write("请输入班级:");
str2 = Console.ReadLine();
Console.Write("请输入入学年份:");
year = Convert.ToInt32(Console.ReadLine());
selectCmd =
"SELECT * FROM PERSON WHERE 院系 = '" +
str.Replace("'", "''") + "' and 班级 = '" +
str2.Replace("'", "''") + "'" + " and 入学年份 =" + year + " ORDER BY 加权平均分 DESC";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "3":
selectCmd =
"SELECT * FROM PERSON WHERE 加权平均分 < 70";
myDataSet = new DataSet();
myAdapter = new OleDbDataAdapter(selectCmd, conn);
myAdapter.Fill(myDataSet, "PERSON");
if (!outValues(myDataSet)) Console.WriteLine("未找到,回车继续");
break;
case "0":
k = 0;
Console.WriteLine("按回车返回");
break;
default:
Console.WriteLine("输入错误,请重新选择");
conn.Close();
break;
}
Console.ReadKey();
}
}
static void Main()
{
OleDbConnection conn;
conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb");
conn.Open();
string str, insertCmd, delCmd, updateCmd, selectCmd;
OleDbCommand cmd;
OleDbDataReader myReader;
string id;
int input;
double input2;
int k = 1;
while (k == 1)
{
Console.Clear();
Console.WriteLine("************************");
Console.WriteLine("教务管理系统");
Console.WriteLine("1->添加学生信息" );
Console.WriteLine("2->删除学生信息");
Console.WriteLine("3->修改学生信息");
Console.WriteLine("4->查询学生信息");
Console.WriteLine("5->统计学生成绩");
Console.WriteLine("0->退出");
Console.WriteLine("************************");
Console.Write("请选择:");
str = Console.ReadLine();
switch (str)
{
case "1":
Console.Write("请输入添加学生学号:");
id = Console.ReadLine();
selectCmd =
"SELECT * FROM PERSON WHERE 学号 = '" +
id.Replace("'", "''") + "'";
cmd = new OleDbCommand(selectCmd, conn);
myReader = cmd.ExecuteReader();
if (myReader.Read())
{
Console.WriteLine("此学生已经存在,回车继续");
}
else
{
insertCmd = "Insert Into PERSON(学号, 姓名, 年龄, 院系, 班级, 入学年份, 加权平均分, 状况) Values(@id, @name, @age, @department, @class,@in,@avg,@state)";
cmd = new OleDbCommand(insertCmd, conn);
cmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@name", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@age", OleDbType.Integer));
cmd.Parameters.Add(new OleDbParameter("@department", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@class", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@in", OleDbType.Integer));
cmd.Parameters.Add(new OleDbParameter("@avg", OleDbType.Double));
cmd.Parameters.Add(new OleDbParameter("@state", OleDbType.Char));
cmd.Parameters["@id"].Value = id;
Console.Write("请输入姓名:");
str = Console.ReadLine();
cmd.Parameters["@name"].Value = str;
Console.Write("请输入年龄:");
input = Convert.ToInt32(Console.ReadLine());
cmd.Parameters["@age"].Value = input;
Console.Write("请输入院系:");
str = Console.ReadLine();
cmd.Parameters["@department"].Value = str;
Console.Write("请输入班级:");
str = Console.ReadLine();
cmd.Parameters["@class"].Value = str;
Console.Write("请输入入学年份:");
input = Convert.ToInt32(Console.ReadLine());
cmd.Parameters["@in"].Value = input;
Console.Write("请输入加权平均分:");
input2 = Convert.ToDouble(Console.ReadLine());
cmd.Parameters["@avg"].Value = input2;
Console.Write("请输入状况(在校,毕业,休学,退学):");
str = Console.ReadLine();
cmd.Parameters["@state"].Value = str;
cmd.ExecuteNonQuery();
Console.WriteLine("添加完成,回车继续");
}
break;
case "2":
Console.Write("请输入删除学生学号:");
id = Console.ReadLine();
selectCmd =
"SELECT * FROM PERSON WHERE 学号 = '" +
id.Replace("'", "''") + "'";
cmd = new OleDbCommand(selectCmd, conn);
myReader = cmd.ExecuteReader();
if (myReader.Read())
{
delCmd = "Delete From PERSON Where 学号 = @id";
cmd = new OleDbCommand(delCmd, conn);
cmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Char));
cmd.Parameters["@id"].Value = id;
cmd.ExecuteNonQuery();
Console.WriteLine("删除完成,回车继续");
}
else Console.WriteLine("未找到这个学生,回车继续");
break;
case "3":
Console.Write("请输入修改学生学号:");
id = Console.ReadLine();
selectCmd =
"SELECT * FROM PERSON WHERE 学号 = '" +
id.Replace("'", "''") + "'";
cmd = new OleDbCommand(selectCmd, conn);
myReader = cmd.ExecuteReader();
if (myReader.Read())
{
updateCmd = "UPDATE PERSON Set 姓名=@name, 年龄=@age, 院系=@department, 班级=@class, 入学年份=@in, 加权平均分=@avg, 状况=@state Where 学号=@id";
cmd = new OleDbCommand(updateCmd, conn);
cmd.Parameters.Add(new OleDbParameter("@name", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@age", OleDbType.Integer));
cmd.Parameters.Add(new OleDbParameter("@department", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@class", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@in", OleDbType.Integer));
cmd.Parameters.Add(new OleDbParameter("@avg", OleDbType.Double));
cmd.Parameters.Add(new OleDbParameter("@state", OleDbType.Char));
cmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Char));
Console.Write("请输入姓名:");
str = Console.ReadLine();
cmd.Parameters["@name"].Value = str;
Console.Write("请输入年龄:");
input = Convert.ToInt32(Console.ReadLine());
cmd.Parameters["@age"].Value = input;
Console.Write("请输入院系:");
str = Console.ReadLine();
cmd.Parameters["@department"].Value = str;
Console.Write("请输入班级:");
str = Console.ReadLine();
cmd.Parameters["@class"].Value = str;
Console.Write("请输入入学年份:");
input = Convert.ToInt32(Console.ReadLine());
cmd.Parameters["@in"].Value = input;
Console.Write("请输入加权平均分:");
input2 = Convert.ToDouble(Console.ReadLine());
cmd.Parameters["@avg"].Value = input2;
Console.Write("请输入状况(在校,毕业,休学,退学):");
str = Console.ReadLine();
cmd.Parameters["@state"].Value = str;
cmd.Parameters["@id"].Value = id;
cmd.ExecuteNonQuery();
Console.WriteLine("修改完成,回车继续");
}
else Console.WriteLine("未找到这个学生,回车继续");
break;
case "4":
search(conn);
break;
case "5":
statistics(conn);
break;
case "0":
k=0;
conn.Close();
Console.WriteLine("按回车退出系统");
break;
default:
Console.WriteLine("输入错误,请重新选择");
break;
}
Console.ReadKey();
}
}
}
}
检查下显示的时候有没有刷新数据,只获取数据而不刷新可能得不到最新的数据显示。
DataTable和DataSet都是内存的,你数据库更新要重新获取。有什么疑惑可以继续追问