
public void Display()
{
//清空数据源
dt = (DataTable)dataGridView1.DataSource;
if (dt != null && dt.Rows.Count > 0)
dt.Rows.Clear();
dataGridView1.DataSource = dt;
string sql = "select BH,PhotoCount from tree"; //SQL语句
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, DBHelper.conn); //定义一个dataAdapter
dataAdapter.Fill(dataSet, "tree"); //填充数据集
dataGridView1.DataSource = dataSet.Tables["tree"]; //填充数据进控件
}
public void UpdateDisplay()
{
//清空数据源
dt = (DataTable)dataGridView1.DataSource;
if (dt != null && dt.Rows.Count > 0)
dt.Rows.Clear();
dataGridView1.DataSource = dt;
string sql = "UPDATE tree SET PhotoCount ='"+textBox2.Text+"' WHERE BH ="+textBox1.Text; //SQL语句
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, DBHelper.conn); //定义一个dataAdapter
dataAdapter.Fill(dataSet, "tree"); //填充数据集
dataGridView1.DataSource = dataSet.Tables["tree"]; //填充数据进控件
}
private void Form1_Load(object sender, EventArgs e)
{
Display();
}
//根据BH查询图片数量,同时更新PhotoCount
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = "";
string path = @"G:\\判断图片\\" + textBox1.Text;
if (!System.IO.Directory.Exists(path))
{
MessageBox.Show("路径不存在");
//Display();
}
else
{
//string count = System.IO.Directory.GetFiles(path).Count().ToString();
//textBox2.Text = count;
string[] file = System.IO.Directory.GetFiles(path);
textBox2.Text += file.Length;
UpdateDisplay();
}
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
textBox1.Text= dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
//dataGridView1.Rows[e.RowIndex].Cells[1].Value=textBox2.Text;
}
}
------解决思路----------------------
google了下,应该是字段名错了。PhotoCount, BH字段在数据库里都有吗?另外不确定access是不是大小写敏感,也尽量匹配一下。
debug时看看sql的内容是什么?
------解决思路----------------------
SQL 语句不对
Dug看看SQL语句是什么,直接拿到access里执行看看,应该是报一样的错
从你下面的代码来看 textBox1.Text 应该是表的主键,同时也是一个文件夹的名称,你的SQL语句那么写,那么它应该是一个 数值类型的。你看看 textBox1.Text= dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); 这一句是不是没有赋上值,造成了textBox1.Text 为空的情况
如果textBox1.Text 为空或者字符串类型的值,SQL的写法都是不正确的。
------解决思路----------------------
很费解你的UpdateDisplay方法。。。。
看上去像是重新提取数据,刷新DataGridView上的数据,但是却写个Update的Sql语句?这是要干什么呢?
------解决思路----------------------
Update语句,执行结果只会返回受影响的行数
你Fill是想干啥
------解决思路----------------------
查询才应该将结果填充
增,删,改,应该使用另一个返回结果是int型的函数去执行
------解决思路----------------------
+1
之前没注意,使用 dataAdapter.Fill(dataSet, "tree"); 执行SQL不对
因为之前Display()已经Fill一次dataSet 中的tree表
在MSDN中说明
当使用后面的 Fill 调用来刷新 DataSet 的内容时,必须满足以下两个条件:
1.该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。
2.必须存在键列信息。如果主键信息存在,则协调任何重复的行,并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema(通过指定 DataTable 的 PrimaryKey 属性),或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。
总之,第一次Fill的时候,tree表的结构已经形成了,第二次Fill,执行SQL语句返回的数据表结构必须和第一次对应起来。
而Update语句返回受影响的行数,和第一次Select返回表结构无法对应
再就是Fill 之前的语句都是Select 语句,不能用Update
------解决思路----------------------
你这样去执行,到底改没改,我也不确定,你需要自己去看到底改了没有
正常应该是调用另一个方法去执行insert,update和delete,而不要用fill