时间:2021-07-01 10:21:17 帮助过:11人阅读
以前编写有关链接数据库,已经实现增删改查功能都比较繁琐和冗长。本篇文章使用了比较简单明了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。使用它我们可以使函数功能更加丰富灵活
访问sql server2014数据库
标签: