以前编写有关链接数据库,已经实现增删改查功能都比较繁琐和冗长。本篇文章使用了比较简单明了de方式,实现这些功能
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient;//第一步:引用与sql相关的命名空间 using System.Data;//引用表的命名空间 public class SqlHelper { public static string connstr = "server=.;uid=sa;pwd=123;database=Blog";//公共的静态的 连接字符串 /// <summary> /// 功能:数据库连接已经执行sql语句 /// </summary> /// <param name="cmdText"> /// sql语句 /// </param> /// <param name="pms"> /// 一个可变数组。意味着你可以传入一个或多个参数进去,有可伸缩性 /// </param> /// <returns> /// 返回结果大于0则执行成功 /// </returns> public static int ExecuteScalar(string cmdText, params SqlParameter[] pms) { //params:不限长度的数组 //第一步:创建数据库对象连接 SqlConnection conn = new SqlConnection(connstr); //第二步:打开数据库 conn.Open(); //第三步:创建数据库命令对象和数据库查询语句 SqlCommand cmd = new SqlCommand(cmdText, conn); //第四步:创建参数对象 if (pms != null) { foreach (SqlParameter item in pms)//第一个参数:你的数据类型 //第二个参数是值 //第三个参数:in 在什么什么里面 //第四个参数 数组的名称 { if (item != null) { cmd.Parameters.Add(item); } } } //第五步:返回结果 int i = Convert.ToInt32(cmd.ExecuteScalar()); //第六步:关闭数据库 conn.Close(); //第六步:把最终的结果返回到外面去 return i; } /// <summary> /// 检验数据库里面有没有这个qq账号 /// </summary> /// <param name="cmdText"></param> /// <returns></returns> public static bool acountexist(string cmdText, params SqlParameter[] pms) { SqlConnection conn = new SqlConnection(connstr); conn.Open(); SqlCommand cmd = new SqlCommand(cmdText, conn); if (pms != null) { foreach (SqlParameter item in pms)//第一个参数:你的数据类型 //第二个参数是值 //第三个参数:in 在什么什么里面 //第四个参数 数组的名称 { if (item != null) { cmd.Parameters.Add(item); } } } int i = Convert.ToInt32(cmd.ExecuteScalar()); conn.Close(); if (i > 0) return true; else { return false; } } //实现增删改查功能 public static int ExecuteNonQuery(string cmdText, params SqlParameter[] pms) { //params:不限长度的数组 //第一步:创建数据库对象连接 SqlConnection conn = new SqlConnection(connstr); //第二步:打开数据库 conn.Open(); //第三步:创建数据库命令对象和数据库查询语句 SqlCommand cmd = new SqlCommand(cmdText, conn); //第四步:创建参数对象 //cmd.Parameters.Add(pms);//如果我们在这里直接放入pms数组,那么cmd添加进去的都是SqlParameter,而不是具体的参数。 // int[] ii = new int[5] { 1,2,3,4,5 }; if (pms != null) { foreach (SqlParameter item in pms)//第一个参数:你的数据类型 //第二个参数是值 //第三个参数:in 在什么什么里面 //第四个参数 数组的名称 { if (item != null) { cmd.Parameters.Add(item); } } } //第五步:返回结果 int i = Convert.ToInt32(cmd.ExecuteNonQuery()); //第六步:关闭数据库 conn.Close(); //第六步:把最终的结果返回到外面去 return i; } //查询数据返回到一张表 public static DataTable GetTable(string cmdText, params SqlParameter[] pms) { //params:不限长度的数组 //第一步:创建数据库对象连接 SqlConnection conn = new SqlConnection(connstr); //第二步:打开数据库 conn.Open(); //第三步:创建数据库命令对象和数据库查询语句 SqlCommand cmd = new SqlCommand(cmdText, conn); //第四步:创建参数对象 //cmd.Parameters.Add(pms);//如果我们在这里直接放入pms数组,那么cmd添加进去的都是SqlParameter,而不是具体的参数。 // int[] ii = new int[5] { 1,2,3,4,5 }; if (pms != null) { //for (int i = 0; i <pms.Length; i++) //{ // if (pms[i]!=null) // { // cmd.Parameters.Add(pms[i]); // } //} foreach (SqlParameter item in pms)//第一个参数:你的数据类型 //第二个参数是值 //第三个参数:in 在什么什么里面 //第四个参数 数组的名称 { if (item != null) { cmd.Parameters.Add(item); } } } //5. SqlDataAdapter是.net中用于存放数组库里面取出来的数 相当于我们现实生活中的容器 SqlDataAdapter sda = new SqlDataAdapter(cmd); //6.去创建一个适配器 用来接受容器的 DataSet ds = new DataSet(); sda.Fill(ds, "aa"); conn.Close(); DataTable dt = ds.Tables["aa"]; return dt; } public static SqlDataReader GetReader(string cmdText, params SqlParameter[] pms) { SqlConnection conn = new SqlConnection(connstr); //第二步:打开数据库 conn.Open(); //第三步:创建数据库命令对象和数据库查询语句 SqlCommand cmd = new SqlCommand(cmdText, conn); //第四步:创建参数对象 //cmd.Parameters.Add(pms);//如果我们在这里直接放入pms数组,那么cmd添加进去的都是SqlParameter,而不是具体的参数。 // int[] ii = new int[5] { 1,2,3,4,5 }; if (pms != null) { //for (int i = 0; i <pms.Length; i++) //{ // if (pms[i]!=null) // { // cmd.Parameters.Add(pms[i]); // } //} foreach (SqlParameter item in pms)//第一个参数:你的数据类型 //第二个参数是值 //第三个参数:in 在什么什么里面 //第四个参数 数组的名称 { if (item != null) { cmd.Parameters.Add(item); } } } SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//把数据取出来以游标的形式放入sdr return sdr; } }
不知道大家有没有注意到,这里面的函数反复使用了一个叫parmas的关键字。这个关键字表明后面使用的数组是一个可变的。即此处输入一个参数也行,两个参数也可以,等等。举例说明如下:
protected void btnReset_Click(object sender, EventArgs e) { string cmd = "select COUNT(0) from UserInfo where UserQQ=@a"; SqlParameter pms = new SqlParameter("@a", txtUserQQ.Text); if (SqlHelper.acountexist(cmd, pms)) { string cmdReset = "update UserInfo set UserPwd='111' where UserQQ=@a"; SqlParameter pms1 = new SqlParameter("@a", txtUserQQ.Text); if (SqlHelper.ExecuteNonQuery(cmdReset, pms1) > 0) { Response.Write("密码已经重置!"); } else { Response.Write("密码重置失败!"); } } else { Response.Write("没有该账号!请注册..."); } }
当然也可以传两个以上的参数
protected void Button2_Click(object sender, EventArgs e) { string cmd = "select COUNT(0) from UserInfo where UserQQ=@a and UserPwd=@b"; SqlParameter pms = new SqlParameter("@a", txtUserQQ.Text); SqlParameter pms2 = new SqlParameter("@b", txtUserPwd.Text); if (SqlHelper.ExecuteScalar(cmd, pms, pms2) > 0) { Response.Write("登陆成功!"); } else { Response.Write("账号或密码有误,请重新输入!"); } } protected void Button1_Click(object sender, EventArgs e) { string userQQ = string.Empty; //系统生成一个QQ号 while (true) { Random rm = new Random(); userQQ = rm.Next(1000, 9999).ToString(); userQQ += rm.Next(1000, 9999).ToString(); string cmd = "select COUNT(0) from UserInfo where UserQQ=@a"; SqlParameter pms = new SqlParameter("@a", userQQ); if (SqlHelper.acountexist(cmd, pms)) { } else { break; } } string cmd1 = "insert into UserInfo(UserName,UserPwd,UserQQ,UserRealName,UserRealmark,UserSex) values(@username,@userpwd,@userqq,@userrealname,@userrealmark,@usersex);"; string sex = string.Empty; if (rbtnMan.Checked == true) { sex = "男"; } else { sex = "女"; } SqlParameter[] pms1 = new SqlParameter[6] { new SqlParameter("@username",txtUserName.Text), new SqlParameter("@userpwd",txtQQpwd.Text), new SqlParameter("@userqq",userQQ), new SqlParameter("@userrealname",txtRealUserName.Text), new SqlParameter("@userrealmark",txtbeizhu.Text), new SqlParameter("@usersex",sex) }; if (SqlHelper.ExecuteNonQuery(cmd1, pms1) > 0) { Response.Write("注册成功!" + "QQ账号为:" + userQQ); } else { Response.Write("注册失败!"); } }
值得一提de就能使参数可变传递的就是这样一个关键字params。使用它我们可以使函数功能更加丰富灵活