本帖最后由 li_xi_quan 于 2011-10-24 09:40:59 编辑

解决方案 »

  1.   

    private void previousPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                //上一页
                if (pageCurrent == 0)//如果当前页数为0,则提示操作无效,停止运行,防止异常发生
                {
                    MessageBox.Show("没有数据显示,操作无效!");
                }
                else
                {
                    pageCurrent--;
                    if (pageCurrent <= 0)//当前页号
                    {
                        MessageBox.Show("已经是第一页,请点击“下一页”查看!");
                        pageCurrent++;
                        return;
                    }
                    else
                    {
                        nCurrent = pageSize * (pageCurrent - 1);
                    }
                    LoadData();
                    if (this.currentPages.Value > 1)
                    {
                        --this.currentPages.Value;
                    }
                }
            }        private void nextPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                //下一页
                if (pageCurrent == 0)//如果当前页数为0,则提示操作无效,停止运行,防止异常发生
                {
                    MessageBox.Show("没有数据显示,操作无效!");
                }
                else
                {
                    pageCurrent++;
                    if (pageCurrent > pageCount)//当前页号>页数
                    {
                        MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
                        pageCurrent--;
                        return;
                    }
                    else
                    {
                        nCurrent = pageSize * (pageCurrent - 1);
                    }
                    LoadData();
                    if (this.currentPages.Value < this.currentPages.Maximum)
                    {
                        ++this.currentPages.Value;
                    }
                }
            }        private void firstPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                //第一页
                if (pageCurrent == 0)//如果当前页数为0,则提示操作无效,停止运行,防止异常发生
                {
                    MessageBox.Show("没有数据显示,操作无效!");
                }
                else
                {
                    pageCurrent = 1;    //当前页数从1开始
                    nCurrent = 0; //当前记录数从0开始
                    LoadData();
                    this.currentPages.Value = 1;
                }
            }        private void lastPage_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
            {
                //最后页
                pageCurrent = pageCount;
                nCurrent = pageSize * (pageCurrent - 1);
                if (pageCurrent == 0)//如果当前页数为0,则提示操作无效,停止运行,防止异常发生
                {
                    MessageBox.Show("没有数据显示,操作无效!");
                }
                else
                {
                    LoadData();
                    this.currentPages.Value = Convert.ToInt32(this.totalPages.Text);
                }
            }        private void currentPages_ValueChanged(object sender, EventArgs e)
            {
                //转到指定页
                int page = Convert.ToInt32(this.currentPages.Value);
                if (page > page1 && page <= pageCount)
                {
                    int number = page - page1;
                    if (pageCurrent < pageCount)
                    {
                        pageCurrent = pageCurrent + number;
                        if (pageCurrent == pageCount)
                        {
                            nCurrent = pageSize * (pageCurrent - 1);                    }
                        else
                        {
                            nCurrent = pageSize * (pageCurrent - 1);
                        }
                        LoadData();
                    }
                }            if (0 < page && page < page1)
                {
                    int number = page1 - page;
                    if (pageCurrent > 0)
                    {
                        pageCurrent = pageCurrent - number;
                        if (pageCurrent == 1)
                        {
                            nCurrent = pageSize * (pageCurrent - 1);
                        }
                        else
                        {
                            nCurrent = pageSize * (pageCurrent - 1);
                        }
                        LoadData();
                    }
                }
            }        private void saveAdd_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 DataTable GetTableNames1(string sql)//GetTableNames1()方法,用于获取所有数据库名
            {
                MySqlConnection conn = null;
                MySqlCommand command = null;
                MySqlDataReader reader = null;
                DataTable getName = new DataTable();            //DataTable table = GetTableNames1("show databases");//调用GetTableNames1()获取所有数据库名
                //databaseName2 = table.Rows[0][0].ToString();            conn = new MySqlConnection("Server=192.168.0.22;uid=users;pwd=85836262;charset = utf8 ;Database=xscj");////获取数据库名时,先要在某个数据库中建立一个登录验证的表
                command = conn.CreateCommand();
                command.CommandText = sql;
                conn.Open();
                reader = command.ExecuteReader();
                getName.Load(reader);
                conn.Close();
                command = null;
                reader.Close();
                return getName;
            }        private DataTable GetTableNames2(string sql)//GetTableNames2()方法,用于获取某个数据库中所有表名
            {
                MySqlConnection conn = null;
                MySqlCommand command = null;
                MySqlDataReader reader = null;
                DataTable getName = new DataTable();
                conn = new MySqlConnection("Server=192.168.0.22;uid=users;pwd=85836262;charset = utf8 ;Database=" + databaseName1);
                command = conn.CreateCommand();
                command.CommandText = sql;
                conn.Open();
                reader = command.ExecuteReader();
                getName.Load(reader);
                conn.Close();
                command = null;
                reader.Close();
                return getName;
            }
      

  2.   

     private void getTableName_Click(object sender, EventArgs e)//获取MySQL服务器中某个数据库的所有表名,并且把所有表名在checkedListBox1中显示
            {
                if (databaseName1 == null)
                {
                    MessageBox.Show("你还没有获取或者选中一个数据库名!");
                }
                else
                {
                    checkedListBox1.Items.Clear();//当用户再次单击获取数据集按钮时,防止在checkedListBox1中重复显示,先清除之前checkedListBox1中的内容
                    DataTable table = GetTableNames2("show tables");//调用GetTableNames2()获取某个数据库中所有表名
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        checkedListBox1.Items.Add(table.Rows[i][0].ToString());
                    }
                }
            }        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }        private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)//控制checkedListBox1只能单选,不能复选
            {
                if (this.checkedListBox1.CheckedItems.Count > 0)
                {
                    for (int i = 0; i < this.checkedListBox1.Items.Count; i++)
                    {
                        if (i != e.Index)
                        {
                            this.checkedListBox1.SetItemCheckState(i, System.Windows.Forms.CheckState.Unchecked);
                        }
                    }
                }
            }        private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                tableName = checkedListBox1.SelectedItem.ToString();
            }        private void getDataBaseName_Click(object sender, EventArgs e)//获取MySQL服务器中所有的数据库名,并且把所有的数据库名在checkedListBox2中显示
            {
                checkedListBox2.Items.Clear();
                DataTable table = GetTableNames1("show databases");//调用GetTableNames1()获取所有数据库名
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    if (table.Rows[i][0].ToString() != "information_schema" && table.Rows[i][0].ToString() != "mysql"
                        && table.Rows[i][0].ToString() != "performance_schema" && table.Rows[i][0].ToString() != "test"
                        && table.Rows[i][0].ToString() != "work")
                    {
                        checkedListBox2.Items.Add(table.Rows[i][0].ToString());
                    }
                    else
                        continue;
                }
            }        private void checkedListBox2_ItemCheck(object sender, ItemCheckEventArgs e)//控制checkedListBox2只能单选,不能复选
            {
                if (this.checkedListBox2.CheckedItems.Count > 0)
                {
                    for (int i = 0; i < this.checkedListBox2.Items.Count; i++)
                    {
                        if (i != e.Index)
                        {
                            this.checkedListBox2.SetItemCheckState(i, System.Windows.Forms.CheckState.Unchecked);
                        }
                    }
                }
            }        private void checkedListBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                databaseName1 = checkedListBox2.SelectedItem.ToString();
            }
        }
    }以上是程序的完整代码
      

  3.   

    问题解决了,改用ODBC访问数据库,就没有问题了,呵呵。