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();
大佬们都怎么优化的 比如建一个类 或者其他办法都可以 能给一小段代码参考下吗 有看到网上的实例发个链接也可以
封装成一个工具类,根据你的需求需要两个接口就可以了,一个是查询操作返回DataTable,另一个是非查询操作返回整型就可以了,然后传入sql就可以了,现成的数据库连接工具类网上一大堆,例如:https://www.cnblogs.com/AMortal/p/7538443.html
感觉我这么搞小程序看不出来 要是数据量大点估计会很慢吧 程序里写满了以上这种代码 感觉很蠢 又不知道怎么弄。。。
老兄虽然我是做c++的,但是你这个cn是数据库的一个对象吧,有必要这么频繁的开关吗,这种开关是不是放在程序的入口和出口就可以了?
至于封装,你可以把这数据库操作功能直接封装成一个类,增删查改做成类的接口,使用功能时候只要调用接口就可以了,这样不就可以避免大量重复的代码了?
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,给你的一个代码里,很有可能会有报错,自己理解意思就行。
增/删/改 一个方法, 查询一个方法
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;
}
}
}