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个回答

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

hxycsdn9159
hxycsdn9159 这个地址里面的第2个:ExecuteNonQuery()方法和第4个:ExecuteDataTable()就可以满足你的要求
一年多之前 回复

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

 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,给你的一个代码里,很有可能会有报错,自己理解意思就行。

Csharpsss
Csharpsss 谢谢
一年多之前 回复

增/删/改 一个方法, 查询一个方法
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;

微软官方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;
            }
        }
    }

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!