using System; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; namespace DataBaseSpace { class DataBase { // Constructor DataBase public DataBase() { } // Statement Sqlconnection conn private SqlConnection conn = null; #region 打开数据库 Open() /// <summary> /// 打开数据库 /// </summary> private void Open() { if (conn == null) //第一次为null { // 读取App.config文件的数据库连接串 string SqlStr = System.Configuration.ConfigurationSettings.AppSettings["ConnSqlStr"].ToString(); conn = new SqlConnection(SqlStr); } // 判断数据库状态是否关闭 if (conn.State == ConnectionState.Closed) { conn.Open(); // 打开数据库 } } #endregion #region 关闭数据库,并释放资源 Close() Dispose() /// <summary> /// 关闭数据库,并释放资源 /// </summary> private void Close() { if (conn != null) { // 关闭数据库连接 conn.Close(); // null conn = null; // 释放资源 conn.Dispose(); } } #endregion #region 把参数转化为Parameter参数 Parameter /// <summary> /// 把参数转化为Parameter参数 /// </summary> /// <param name="dbpara">数据表字段名称 (如: uid , username)</param> /// <param name="dbtype">数据表字段类型 (如: int ,varchar)</param> /// <param name="dbsize">数据表字段长度 (如: 50 , 225)</param> /// <param name="dbvalue">参数值 (如: userinfo.uid)</param> /// <returns>返回新的Parameter对象</returns> public SqlParameter MarkPara(string dbpara , SqlDbType dbtype , int dbsize , object dbvalue) { // 对象 SqlParameter Para; if (dbsize > 0) { Para = new SqlParameter(dbpara, dbtype, dbsize); } else { Para = new SqlParameter(dbpara, dbtype); } // 负值 Para.Value = dbvalue; //返回SqlParameter return Para; } #endregion #region 执行命令文本 SqlCommand() /// <summary> /// 创建SqlCommand命令文本,执行命令文本 /// </summary> /// <param name="sqlstr">Sql语句 (如:insert into xxx (uid ,name) value (@uid , @name)</param> /// <param name="Para">命令文本参数</param> /// <returns>返回SqlCommand对象</returns> private SqlCommand CreateCommand(string sqlstr , SqlParameter[] Para) { // 打开数据库 this.Open(); // SqlCommand cmd = new SqlCommand(sqlstr, conn); // 执行命令类型: 命令文本 cmd.CommandType = CommandType.Text; // Para 是否为空 if (Para != null) { // 循环输出Para参数 foreach (SqlParameter p in Para) { // 添加para参数到cmd.Parameter里 cmd.Parameters.Add(p); } } // 返回SqlCommand return cmd; } #endregion #region 创建SqlDataAdapter来执行命令文本 SqlDataAdapter /// <summary> /// 创建SqlDataAdapter来执行命令文本 SqlDataAdapter /// </summary> /// <param name="SqlStr">Sql 语句 (如:insert into xx(uid,name) values(@uid,@name)</param> /// <param name="Para">命令参数 (如 : userinto.uid)</param> /// <returns>返回SqlDataAdapter对象</returns> private SqlDataAdapter CreateDataAdapter(string SqlStr, SqlParameter[] Para) { // 打开数据库 this.Open(); SqlDataAdapter per = new SqlDataAdapter(SqlStr,conn); // 执行命令类型: 文本类型 per.SelectCommand.CommandType = CommandType.Text; if (Para != null) { // 循环输出Para foreach (SqlParameter p in Para) { // 添加 p 到per中 per.SelectCommand.Parameters.Add(p); } } // 返回SqlDataadapter return per; } #endregion #region 执行命令文本,返回一个int类型 /// <summary> /// 执行命令文本,返回int类型(储存过程 /// </summary> /// <param name="SqlStr">Sql语句 (如:select * from xxx where (uid = @uid)</param> /// <param name="Para">参数值</param> /// <returns>返回 int 类型</returns> public int RunCmd(string SqlStr, SqlParameter[] Para) { SqlCommand cmd = CreateCommand(SqlStr, Para); try { return (int)cmd.ExecuteNonQuery(); } catch (SqlException ex) //捕获异常 { MessageBox.Show("语句执行失败 --> " + ex.Errors.ToString(), "执行语句信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); return -1; } finally { this.Close(); } } /// <summary> /// 执行命令文本,返回int类型 /// </summary> /// <param name="SqlStr">Sql语句 (如:select * from tdxxx where (uid = xxx)</param> /// <returns>返回 int 类型</returns> public int RunCmd(string SqlStr) { SqlCommand cmd = CreateCommand(SqlStr, null); try { cmd.ExecuteNonQuery(); return 1; } catch (SqlException ex) //捕获异常 { MessageBox.Show("语句执行失败 --> " + ex.Errors.ToString(), "执行语句信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); return -1; } finally // 释放资源 { this.Close(); } } #endregion #region 执行命令文本,返回DataSet类型 /// <summary> /// 执行命令文本,返回DataSet类型(储存过程 /// </summary> /// <param name="SqlStr">Sql语句 (如:insert into xx(uid,name) values(@uid,@name)</param> /// <param name="Para">命令参数值</param> /// <param name="tdName">表名</param> /// <returns>返回DataSet类型</returns> public DataSet RunCmdReturnDS(string SqlStr, SqlParameter[] Para , string tdName) { SqlDataAdapter per = CreateDataAdapter(SqlStr, Para); DataSet ds = new DataSet(); try { per.Fill(ds, tdName); return ds; } catch (SqlException ex) //捕获异常 { MessageBox.Show("语句执行失败 --> " + ex.Errors.ToString(), "执行语句信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } finally // 释放资源 { this.Close(); } } /// <summary> /// 执行命令文本,返回DataSet类型 /// </summary> /// <param name="SqlStr">Sql语句 (如:insert into xx(uid,name) values(aaa,bb)</param> /// <param name="tdName">表名</param> /// <returns>返回DataSet类型</returns> public DataSet RunCmdReturnDS(string SqlStr, string tdName) { SqlDataAdapter per = CreateDataAdapter(SqlStr, null); DataSet ds = new DataSet(); try { per.Fill(ds, tdName); return ds; } catch (SqlException ex) //捕获异常 { MessageBox.Show("语句执行失败 --> " + ex.Errors.ToString(), "执行语句信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } finally // 释放资源 { this.Close(); } } #endregion }//class }//namespace /// 总结: -----------------------储存过程------------------------------- /// 1、记得在使用web开发的时候,只要使用DataAdapter这个命令时,可以不用调用conn.Open() 打开数据库,而这里,是不可以,必须调用Open(),否责........ /// 2、程序开发完后,可以把try....catch...finally...这些捕获异常掉去,可以提高程序性能,更多的判断放在UI层 /// 3、 /// 4、 /// 5、 /// 6、 /// 7、 /// 8、自用(此程序代码,
posted on 2010-01-07 12:06 SonyXbox 阅读(335) 评论(0) 编辑 收藏 举报