Csharpsss
Csharpsss
2018-08-03 06:45
采纳率: 88.2%
浏览 1.0k

C# winform 增查改删数据库内容 每次进行一个操作都要复制以下代码

cn.Open();
SqlCommand sql = new SqlCommand("select *from rkb where 编码='" + textBox2.Text + "'");
SqlDataAdapter da = new SqlDataAdapter();
DataTable ds = new DataTable();
da.SelectCommand = sql;
da.SelectCommand.Connection = cn;
da.Fill(ds);
this.dataGridView1.DataSource = ds;
sql.ExecuteNonQuery();
cn.Close();

cn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection =cn;
cmd.CommandText = "insert into kcbvalues('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
MessageBox.Show("入库成功");
cmd.ExecuteNonQuery();
cn.Close();

大佬们都怎么优化的  比如建一个类 或者其他办法都可以  能给一小段代码参考下吗      有看到网上的实例发个链接也可以               
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • hxycsdn9159
    hxycsdn9159 2018-08-03 07:12
    已采纳

    封装成一个工具类,根据你的需求需要两个接口就可以了,一个是查询操作返回DataTable,另一个是非查询操作返回整型就可以了,然后传入sql就可以了,现成的数据库连接工具类网上一大堆,例如:https://www.cnblogs.com/AMortal/p/7538443.html

    点赞 评论
  • Csharpsss
    Csharpsss 2018-08-03 06:47

    感觉我这么搞小程序看不出来 要是数据量大点估计会很慢吧 程序里写满了以上这种代码 感觉很蠢 又不知道怎么弄。。。

    点赞 评论
  • phenix2009
    白色一大坨 2018-08-03 06:57

    老兄虽然我是做c++的,但是你这个cn是数据库的一个对象吧,有必要这么频繁的开关吗,这种开关是不是放在程序的入口和出口就可以了?
    至于封装,你可以把这数据库操作功能直接封装成一个类,增删查改做成类的接口,使用功能时候只要调用接口就可以了,这样不就可以避免大量重复的代码了?

    点赞 评论
  • weixin_40852944
    weixin_40852944 2018-08-03 07:20
     class DbUtils{
        public boolean exec(sql){
            boolean result = false;
            try{
                cn.Open();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection =cn; 
                cmd.CommandText = "insert into kcbvalues('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
                result = cmd.ExecuteNonQuery()==1;
                cn.Close();
            }catch(Exception e){
    
            }       
            return result;
        }
    
        public SqlDataAdapter query(string sqlStr){
            cn.Open();
            SqlCommand sql = new SqlCommand(sqlStr);
            SqlDataAdapter da = new SqlDataAdapter();
            DataTable ds = new DataTable();
            da.SelectCommand = sql;
            da.SelectCommand.Connection = cn;
            da.Fill(ds);
            cn.Close();
            return da;
        }
    
    }
    

    最简单的是写一个这样的工具类,把平时用到的增删改查抽象出来,然后sql语句单独传进来执行就行了;
    复杂点的是,找一些现成的持久层框架,这样就不用你自己写创建数据库连接,关闭数据库连接等与业务没关联而又繁琐的事情;
    因为我是java,给你的一个代码里,很有可能会有报错,自己理解意思就行。

    点赞 评论
  • duan1311
    编程压力大 2018-08-03 07:38

    增/删/改 一个方法, 查询一个方法
    public class databasemanager
    {
    public DataTable query(vSql)
    {
    cn.Open();
    SqlCommand sql = new SqlCommand(vSql);
    SqlDataAdapter da = new SqlDataAdapter();
    DataTable ds = new DataTable();
    da.SelectCommand = sql;
    da.SelectCommand.Connection = cn;

    sql.ExecuteNonQuery();
    da.Fill(ds);
    cn.Close();
    }

    public DataTable save(vSql)
    {
    cn.Open();
    SqlCommand cmd = new SqlCommand();
    cmd.Connection =cn;
    cmd.CommandText = vSql;
    cmd.ExecuteNonQuery();
    cn.Close();
    }
    }
    外部调用的时候,如下:
    string vSql = "select * from rkb where 编码='" + textBox2.Text + "'";
    databasemanager newManage = new databasemanager()
    DataTable dtSourct = newManager.query(vSql)
    this.dataGridView1.DataSource = dtSourct;

    点赞 评论
  • qq_31868147
    Zachary_CN 2018-08-09 07:27

    微软官方SqlHelper工具类,你可以参考下
    下面是我自己以前小项目自用的

     public   class SQLHelper
        {
     private SqlConnection conn = null;
                private SqlCommand cmd = null;
                private SqlDataReader sdr = null;
    
                public SQLHelper()
                {
                    string connStr = ConfigurationManager.AppSettings["connStr"];
                    conn = new SqlConnection(connStr);
                }
    
                private SqlConnection GetConn()
                {
                    if (conn.State == ConnectionState.Closed)
                    {
                        conn.Open();
                    }
                    return conn;
                }
    
    
                /// <summary>
                /// 执行不带参数的的增删改SQL语句或者存储过程
                /// </summary>
                /// <param name="cmdText">增删改查SQL</param>
                /// <param name="ct">命令类型</param>
                /// <returns>返回受影响的行数</returns>
                public int ExecuteNonQuery(string cmdText, CommandType ct)
                {
                    int res;
                    try
                    {
                        cmd = new SqlCommand(cmdText, GetConn());
                        cmd.CommandType = ct;
                        res = cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
    
                        throw ex;
                    }
                    finally
                    {
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Close();
                        }
    
                    }
                    return res;
                }
    
                /// <summary>
                /// 执行带参数的的增删改SQL语句或者存储过
                /// </summary>
                /// <param name="cmdText">增删改查SQL</param>
                /// <param name="paras">要查询的参数</param>
                /// <param name="ct">命令类型</param>
                /// <returns>返回受影响的行数</returns>
                public int ExecutenQuery(string cmdText, SqlParameter[] paras, CommandType ct)
                {
                    int res;
                    using (cmd = new SqlCommand(cmdText, GetConn()))
                    {
                        cmd.CommandType = ct;
                        cmd.Parameters.AddRange(paras);
                        res = cmd.ExecuteNonQuery();
                    }
                    return res;
                }
    
    
                /// <summary>
                ///  执行不带参数的查询SQL语句或存储过程
                /// </summary>
                /// <param name="cmdText">查询SQL语句或存储过程</param>
                /// <param name="ct">命令类型</param>
                /// <returns></returns>
                public DataTable ExecuteQuery(string cmdText, CommandType ct)
                {
                    DataTable dt = new DataTable();
                    cmd = new SqlCommand(cmdText, GetConn());
                    cmd.CommandType = ct;
                    using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        dt.Load(sdr);
                    }
                    return dt;
                }
    
    
                /// <summary>
                /// 执行带参数的查询SQL语句或存储过程
                /// </summary>
                /// <param name="cmdText">查询SQL语句或存储过程</param>
                /// <param name="paras">参数集合</param>
                /// <param name="ct">命令类型</param>
                /// <returns></returns>
                public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
                {
                    DataTable dt = new DataTable();
                    cmd = new SqlCommand(cmdText, GetConn());
    
                    cmd.CommandType = ct;
                    cmd.Parameters.AddRange(paras);
                    using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                    {
                        dt.Load(sdr);
                    }
                    return dt;
                }
            }
        }
    
    
    点赞 评论

相关推荐