ado.net数据库访问问题,求解答!
分别对dataGridView中显示的数据做修改、删除、添加记录的操作,数据更新都是可以成功提交到MySQL服务器的,在MySQL服务器中可以查看到更新的记录,只是删除和修改一条记录并且update后,再重新从数据库fill到一个数据集并且用dataGridView显示,异常提示在位置0处找不到任何行,调试发现数据集中没有数据只有表的字段名,奇怪的是对dataGridView中显示的数据做添加记录操作后再update,然后再从数据库fill到数据集用同一个dataGridView显示是可以显示数据的,没有任何异常。我是首先从数据库fill一个表到数据集1,而绑定dataGridView的是数据集2,数据集2中的内容是从数据集一中复制读取过来的,主要用于实现分页功能的。
代码如下:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string tableName;
string databaseName1;
//string databaseName2;
string MyConnectionString;
//定义分页数据
int pageSize = 0; //每页显示行数
int nMax = 0; //总记录数
int pageCount = 0; //总页数=总记录数/每页显示行数
int pageCurrent = 0; //当前页号
int nCurrent = 0; //当前记录行
int page1 = 0;
DataSet myds;// = new DataSet();
DataSet dtTemp = new DataSet();
DataTable tmpTable = new DataTable();//初始数据库表
MySqlConnection conn;
MySqlDataAdapter myadp;
MySqlCommandBuilder objCommandBuilder;
public Form1()
{
InitializeComponent();
}
public void showTablesData_Click(object sender, EventArgs e)//显示表数据
{
if (tableName == null)
{
MessageBox.Show("没有选中要修改的数据库表,不能显示要修改的表!");
}
else
{
GetTableContent(tableName);
InitDataSet();
this.currentPages.Value = 1;
}
}
private void GetTableContent(string tableName)
{
conn = new MySqlConnection(); // 创建mysql连接对象
MyConnectionString = "server = 192.168.0.22; uid = users; pwd = 85836262; charset = utf8 ;database =" + databaseName1;
conn.ConnectionString = MyConnectionString; // 配置连接
myds = new DataSet();
conn.Open(); // 打开连接
myadp = new MySqlDataAdapter("select * from " + tableName, conn);
//myds.Reset();
myadp.Fill(myds, tableName);//在 DataSet 中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。
conn.Close();
}
private void InitDataSet()
{
pageSize = 10; //设置页面行数
nMax = myds.Tables[tableName].Rows.Count; //Tables[0]改成了Tables[tableName]
pageCount = (nMax / pageSize); //计算出总页数
if ((nMax % pageSize) > 0) pageCount++;
pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始
this.totalPages.Text = pageCount.ToString(); //显示共几页
LoadData();
}
private void LoadData()
{
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行
tmpTable = myds.Tables[tableName].Clone(); //Tables[0]改成了Tables[tableName]
if (pageCurrent == pageCount)
nEndPos = nMax;
else
nEndPos = pageSize * pageCurrent;
nStartPos = nCurrent;
page1 = pageCurrent;
dtTemp.Tables.Clear();
dtTemp.Tables.Add(tmpTable);
//从元数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
tmpTable.ImportRow(myds.Tables[tableName].Rows[i]); //Tables[0]改成了Tables[tableName]
nCurrent++;
}
bdsInfo.DataSource = tmpTable;
bdnInfo_ItemClicked.BindingSource = bdsInfo;
dataGridView1.DataSource = bdsInfo;
}
private void saveChanges_Click(object sender, EventArgs e)//保存记录修改
{
if (dataGridView1.Rows.Count == 0)//如果dataGridView1的行数为0,说明其中尚未有数据(显示数据),提示并且中断保存修改操作
{
MessageBox.Show("没有记录修改,不需要保存修改!");
}
else
{
if (MessageBox.Show("确定要从MySQL数据库中修改记录吗?", "警告!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
conn = new MySqlConnection(); // 创建mysql连接对象
MyConnectionString = "server = 192.168.0.22; uid = users; pwd = 85836262; charset = utf8 ;database =" + databaseName1;
conn.ConnectionString = MyConnectionString; // 配置连接
conn.Open(); // 打开连接
myadp = new MySqlDataAdapter("select * from " + tableName, conn);
objCommandBuilder = new MySqlCommandBuilder(myadp);
myadp.Update(dtTemp, tableName);
dtTemp.AcceptChanges();
MessageBox.Show("数据已成功更新到MySQL数据库!");
conn.Close();
}
}
}
private void deleteRecord_Click(object sender, EventArgs e)//删除记录
{
if (dataGridView1.Rows.Count == 0)//如果dataGridView1的行数为0,说明其中尚未有数据(显示数据),则提示并且中断刷新操作
{
MessageBox.Show("没有选中要删除的记录,不能进行删除操作!");
}
else
{
if (MessageBox.Show("确定要从MySQL数据库中删除选中记录吗?", "警告!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
if (!r.IsNewRow)
dataGridView1.Rows.Remove(r);
}
conn = new MySqlConnection(); // 创建mysql连接对象
MyConnectionString = "server = 192.168.0.22; uid = users; pwd = 85836262; charset = utf8 ;database =" + databaseName1;
conn.ConnectionString = MyConnectionString; // 配置连接
conn.Open(); // 打开连接
myadp = new MySqlDataAdapter("select * from " + tableName, conn);
objCommandBuilder = new MySqlCommandBuilder(myadp);
myadp.Update(dtTemp, tableName);
dtTemp.AcceptChanges();
MessageBox.Show("选中记录已成功从MySQL数据库中删除!");
conn.Close();
}
}
}