说明,winform程序,只有一个窗体,有查询,添加,更新,删除操作,为了代码简短,省掉了一些校验代码,请高手们看看程序中的数据库操作部分有无优化之处,其他的不用管。此程序用vs2005编写,可以正常运行。using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace rkinfo
{
    public partial class frmxqgl_bind : Form
    {
        public frmxqgl_bind()
        {
            InitializeComponent();
        }        private void frmxqgl_bind_Load(object sender, EventArgs e)
        {
                     
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo", conn);
            dap.Fill(dataSet1, "qinfo");
            
            bindingSource1.DataMember = "qinfo";            ////绑定网格控件/////
            dataGridView1.DataSource = bindingSource1;            /////绑定文本框///////
            t1.DataBindings.Add ("text", bindingSource1, "qid");
            t2.DataBindings.Add ("text", bindingSource1, "qname");
            t3.DataBindings.Add("text", bindingSource1, "qxxzx");
            t4.DataBindings.Add("text", bindingSource1, "qtr");
            t5.DataBindings.Add("text", bindingSource1, "qbb");            lblcount.Text = "当前记录数:"+bindingSource1.Count.ToString ();            conn.Close();
        }        ///查询单条记录
        private void button1_Click(object sender, EventArgs e)
        {
            string bh = tfind.Text.Trim();
            if (bh == "")
            {
                MessageBox.Show("查询编号不能空。", "错误");
                return;
            }
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo where qid="+bh, conn);            dataSet1.Clear();
            dap.Fill(dataSet1, "qinfo");            if (conn.State ==ConnectionState.Open)
               conn.Close();
        }        ///查询所有记录
        private void cmdall_Click(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo ", conn);
            dataSet1.Clear();
            dap.Fill(dataSet1, "qinfo");            conn.Close();
        }        //删除一条记录
        private void cmddel_Click(object sender, EventArgs e)
        {
            string bh = t1.Text.Trim();
            if (bh == "")
            {
                MessageBox.Show("当前无记录,不能删除任何数据。", "错误");
                return;
            }
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            conn.Open();
            OleDbCommand cmd = conn.CreateCommand();
            cmd.CommandText = "delete from qinfo where qid="+bh;
            int i = cmd.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("成功删除1条记录。", "提示");
            }
            else
            {
                MessageBox.Show("删除失败。", "提示");
            }
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo ", conn);
            dataSet1.Clear();
            dap.Fill(dataSet1, "qinfo");            conn.Close();
        }        //添加一条记录
        private void cmdadd_Click(object sender, EventArgs e)
        {
            string tname = t2.Text.Trim();
            string tid = t1.Text.Trim();
            string zx = t3.Text.Trim();
            Single tr =Convert .ToSingle ( t4.Text.Trim());
            Single bb = Convert.ToSingle(t5.Text.Trim());
            if (tid == "")
            {
                MessageBox.Show("没有数据可以添加", "提示");
                return;
            }
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            conn.Open();
            OleDbCommand cmd = conn.CreateCommand();
            cmd.CommandText = "insert into qinfo(qid,qname,qxxzx,qtr,qbb) values('"+tid+"','"+tname +"','"+zx+"',"+tr+","+bb+")";
            int i = cmd.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("成功添加1条记录。", "提示");
            }
            else
            {
                MessageBox.Show("添加失败。", "提示");
            }
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo ", conn);
            dataSet1.Clear();
            dap.Fill(dataSet1, "qinfo");            conn.Close();
        }        //更新一条记录
        private void cmdmodi_Click(object sender, EventArgs e)
        {
            string bh = t1.Text.Trim();
            if (bh == "")
            {
                MessageBox.Show("当前无记录,不能修改任何数据。", "错误");
                return;
            }
            string tname = t2.Text.Trim();
            string xxzx = t3.Text.Trim();
            Single dr = Convert.ToSingle(t4.Text.Trim());
            Single bb = Convert.ToSingle(t5.Text.Trim());
            OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb");
            conn.Open();
            OleDbCommand cmd = conn.CreateCommand();
            cmd.CommandText = "update qinfo set qname='"+tname+"',qxxzx='"+xxzx+"',qtr="+dr+",qbb="+bb+" where qid=" + bh;
            int i = cmd.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("成功修改1条记录。", "提示");
            }
            else
            {
                MessageBox.Show("修改失败。", "提示");
            }
            OleDbDataAdapter dap = new OleDbDataAdapter("select * from qinfo ", conn);
            dataSet1.Clear();
            dap.Fill(dataSet1, "qinfo");            conn.Close();
        }        
            
    }
}

解决方案 »

  1.   

    可以去下个数据库的操作类(SqlHelper),这样写起这些会方便很多。
      

  2.   

    conn.Open(); 这里开始可以加
    try{}
    catch{}
    finaly{}
    异常处理会比较好,
      

  3.   


    winform程序如何分页查询?
      

  4.   

    ado.net是断开练接,我每次操作都要连接一次数据库,这样做没有什么不妥的地方吧?
      

  5.   

    没有,,只要不是太频繁的操作。ado.net是断开连接的意思是。一次连接数据库,把需要的数据放入像dataset这样的结果集中。后可以断开连接,,直接访问内存中的dataset这样的结果集
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    /*********************************
     * 类名:DBHelper
     * 功能描述:提供基本数据访问功能
     * ******************************/
    namespace DAL
    {
        public static class DBHelper
        {
            //数据库连接属性
            private static SqlConnection connection;
            public static SqlConnection Connection
            {
                get
                {
                    string connectionString = ConfigurationManager.ConnectionStrings["HotelManagerConnetionString"].ConnectionString;
                    if (connection == null)
                    {
                        connection = new SqlConnection(connectionString);
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Closed)
                    {
                        connection.Open();
                    }
                    else if (connection.State == System.Data.ConnectionState.Broken)
                    {
                        connection.Close();
                        connection.Open();
                    }
                    return connection;
                }
            }
            /// <summary>
            /// 执行有参SQL语句
            /// </summary>
            public static int ExecuteCommand(string safeSql)
            {
                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                int result = cmd.ExecuteNonQuery();
                return result;
            }
            /// <summary>
            /// 执行带参SQL语句
            /// </summary>
            public static int ExecuteCommand(string sql, params SqlParameter[] values)
            {
                SqlCommand cmd = new SqlCommand(sql, Connection);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddRange(values);
                return cmd.ExecuteNonQuery();
            }
            /// <summary>
            /// 执行无参SQL语句,并返回执行记录数
            /// </summary>
            public static int GetScalar(string safeSql)
            {
                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                int result = Convert.ToInt32(cmd.ExecuteScalar());
                return result;
            }
            /// <summary>
            /// 执行有参SQL语句,并返回执行记录数
            /// </summary>
            public static int GetScalar(string sql, params SqlParameter[] values)
            {
                SqlCommand cmd = new SqlCommand(sql, Connection);
                cmd.Parameters.AddRange(values);
                int result = Convert.ToInt32(cmd.ExecuteScalar());
                return result;
            }
            /// <summary>
            /// 执行无参SQL语句,并返回SqlDataReader 查询
            /// </summary>
            public static SqlDataReader GetReader(string safeSql)
            {
                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                SqlDataReader reader = cmd.ExecuteReader();            
                return reader;
            }
            /// <summary>
            /// 执行有参SQL语句,并返回SqlDataReader
            /// </summary>
            public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
            {
                SqlCommand cmd = new SqlCommand(sql, Connection);
                cmd.Parameters.AddRange(values);
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
            /// <summary>
            /// 执行无参SQL语句,并返回DataTable
            /// </summary>
            public static DataTable GetTable(string safeSql)
            {
                DataSet ds = new DataSet();
                SqlCommand cmd = new SqlCommand(safeSql, Connection);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds.Tables[0];
            }    }    
    }
      

  7.   

     用using来控制connection的释放吧.
    DBHelper
    顶个
      

  8.   

    这个手起来来吧,会害人的,访问一多,你的静态SQLCONNCTION就会出问题的!,还是老实用SQLHELPER吧
      

  9.   

    觉得楼主的conn没有必要定义成局部变量,我一般是定义成类的成员变量,初始为null,第一次用的时候new一下,以后判断是否为null。当然,还得看楼主是否会经常用到同一个conn了。另外,异常处理感觉加上好一点?
      

  10.   

    我的目的就是只使用一个conn,不知道改怎么做了,只好每次操作都 new 一个conn
      

  11.   

    可以创建一个类 包含:一个查询方法,和一个执行SQL语句的方法就行了,只用向方法里面传递SQL语句就行了public class Class1
        {
            string strCn=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=icc.mdb"
            OleDbConnection conn = new OleDbConnection(strCn);
            OleDbDataAdapter dap;
            DataSet ds = new DataSet();        //创建一个函数返回一个DataSet对象
            public DataSet gettable(string com,string table)
            {
                OleDbCommand cmd = new OleDbCommand(com,strCn);
                dap = new OleDbDataAdapter(cmd);
                dap.Fill(ds,table);
                return ds;
            }
            public void ExecuteSql(string sql)
            {
                OleDbCommand cmd = new OleDbCommand(sql,strCn);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }