目录
一、封装工具类
1、创建项目的时候,要创建类库项目,它没有main函数,不能运行,只能编译
为什么要创建类库项目?
因为类库项目可以生成dll文件,该文件可以在其他项目中调用。
2、为了方便每个用户可以将数据库和登录账号改成自己的,我们将数据库连接字符串做成配置文件
添加步骤:
1)在解决方案上右键该项目,添加--》新建项--》应用程序配置文件
需要注意的一点是,配置文件的名称,用默认,大家不要去修改
<!--配置方式一:只能配置数据库连接字符串,不能配置别的-->
<connectionStrings>
<add connectionString="data source=.;database=ttt;user id=sa;pwd=admin123" name="Con1"/>
</connectionStrings>
<!--配置方式二:该软件默认选择汉语,可以在配置文件中指定-->
<appSettings>
<add key="Con2" value="data source=.;database=ttt;user id=sa;pwd=admin123"/>
</appSettings>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add connectionString="data source=.;database=Bookview;user id=sa;pwd=machenxi" name="con1"/>
</connectionStrings>
<appSettings>
<add key="con2" value="data source=.;database=Bookview;user id=sa;pwd=machenxi"/>
</appSettings>
</configuration>
2) 添加引用
右击 引用--》添加引用--》在框架中找到System.Configuration
3) 在类文件中添加对上述dll的引用:using System.Configuration
4)在代码中读取配置文件
//方式二
static string strCon = ConfigurationManager.AppSettings["Con2"].ToString();
//方式一
public static string strCon = ConfigurationManager.ConnectionStrings["Con1"].ConnectionString;
总结:类库的使用步骤
1、创建一个类库项目
2、在引用中添加对System.Configuration的引用
3、在工具类中使用using System.Configuration 引用该类库
4、从配置文件中读取出数据库连接字符串
//方式二
//static string strCon = ConfigurationManager.AppSettings["Con2"].ToString();
//方式一
public static string strCon = ConfigurationManager.ConnectionStrings["Con1"].ConnectionString;
5、在类中实现需要的方法。
6、对该类库进行编译,生成dll文件
7、在需要调用该类库的项目A中,添加对上一步中生成的dll的引用
8、该项目A即可使用类库中的所有公共方法
注意:创建项目的时候,项目名称尽量不要出现.
添加参数--SqlParameter的作用和用法:
1.在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误
2.Add方法和AddRange方法
(1)Add方法
eg:
SqlParameter para =
new
SqlParameter();
//声明参数
para=
new
SqlParameter(
"@name"
, SqlDbType.NVarChar,100);
//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同,但是不能超出数据库字段大小的范围,否则报错。
para.Value = txtname.Text.ToString().Trim();
//这个是输入参数,所以可以赋值。
cmd.Parameters.Add(para);
//参数增加到cmd中。
para =
new
SqlParameter(
"@sex"
, SqlDbType.NVarChar, 10);
para.Value = txtsex.Text.ToString().Trim();
cmd.Parameters.Add(para);
(2)
AddRange方法:添加多个SqlParameter
eg:
SqlParameter[] parameters = { //实例化一个参数对象 指定名字 类型 长度 参数的值
new SqlParameter("@bookID", SqlDbType.Int,4){ Value=4},
new SqlParameter("@bookName", SqlDbType.NVarChar,100){ Value="Html5"},
new SqlParameter("@bookPrice", SqlDbType.Int,4){ Value=50}
};
cmd.Parameters.AddRange(
parameters);
二、实例
/// <summary>
/// 执行SQL语句,返回受影响的行数(只针对insert update delete有意义)
/// </summary>
/// <param name="sql">要执行的sql语句</param>
/// <param name="pas">sql语句的参数</param>
/// <returns>受影响的行数</returns>
public static int HuaXingExecuteNonQuery(string sql, params SqlParameter[] pas)
{
//1、创建数据库连接对象,使用using会自动帮我们关闭连接
using (SqlConnection con = new SqlConnection(strCon))
{
//2、定义一个Command对象,传入sql语句
SqlCommand cmd = new SqlCommand(sql, con);
//3、传入参数
if (pas != null)
{
cmd.Parameters.AddRange(pas);
}
//4、打开数据库连接,连接打开越晚越好,节约资源
con.Open();
//5、执行sql语句,返回受影响的行数
return cmd.ExecuteNonQuery();
}
}
/// <summary>
/// 执行SQL语句,返回第一行第一列的值
/// </summary>
/// <param name="sql">要执行的sql</param>
/// <param name="pas">参数列表</param>
/// <returns>结果的第一行第一列的值</returns>
public static object HuaXingExecuteScalar(string sql, params SqlParameter[] pas)
{
//1、创建连接对象
using (SqlConnection con=new SqlConnection(strCon))
{
//2、实例化Command对象
SqlCommand cmd = new SqlCommand(sql, con);
//3、添加Command参数
if (pas != null)
{
cmd.Parameters.AddRange(pas);
}
//4、打开数据库连接
con.Open();
//5、执行命令
return cmd.ExecuteScalar();
}
}
/// <summary>
/// 执行ExecuteReader
/// </summary>
/// <param name="sql">要执行的sql</param>
/// <param name="pas">sql语句的参数</param>
/// <returns>Reader对象</returns>
public static SqlDataReader HuaXingExecuteReader(string sql, params SqlParameter[] pas)
{
//创建Connection对象,不能使用using创建connection对象,更不能关闭数据连接
SqlConnection con = new SqlConnection(strCon);
//创建Command对象
SqlCommand cmd = new SqlCommand(sql, con);
//添加sql需要的参数
if (pas != null)
{
cmd.Parameters.AddRange(pas);
}
//打开连接
con.Open();
//执行命令
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
public static DataTable HuaXingAdapter(string sql, params SqlParameter[] pas)
{
//1、创建一个DataTable对象
DataTable dt = new DataTable();
//2、创建连接对象
using (SqlConnection con=new SqlConnection(strCon))
{
//3、创建Command对象
SqlCommand cmd = new SqlCommand(sql, con);
//4、添加sql参数
if (pas != null)
{
cmd.Parameters.AddRange(pas);
}
//5、创建Adapter对象
SqlDataAdapter adpt = new SqlDataAdapter();
//关联Command对象
adpt.SelectCommand = cmd;
//6、调用Fill方法,将数据填充到DataTable中
adpt.Fill(dt);
//7、返回DataTable
return dt;
}
}
调用:
private void button1_Click(object sender, EventArgs e)
{
string sql = "update MyStudent set FAge=FAge-1 where FGender=@Sex";
//准备参数
SqlParameter pas = new SqlParameter("@Sex", SqlDbType.VarChar, 4) { Value = "女" };
//调用类库的方法执行sql语句
object b = HuaXingHelper.HuaXingExecuteNonQuery(sql, pas);
int n = (int)b;
if (n > 0)
{
MessageBox.Show("减龄成功!");
}
else
{
MessageBox.Show("减龄失败!");
}
}
/// <summary>
/// 查询学号为5的学生姓名
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//准备SQL语句
string sql = "select FName from MyStudent where Fid=@Id";
//sql需要的参数
SqlParameter pas = new SqlParameter("@Id", SqlDbType.Int) { Value = 5 };
//调用类库中的方法执行
object b=HuaXingHelper.HuaXingExecuteScalar(sql, pas);
MessageBox.Show(b.ToString());
}
/// <summary>
/// 执行ExecuteReader,查询所有班级
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
//准备参数
string sql = "select* from MyClass";
//用Reader对象接收
SqlDataReader reader = HuaXingHelper.HuaXingExecuteReader(sql, null);
//读取reader中的内容,显示到Dgv控件中
//判断是否有数据
if (reader.HasRows)
{
while (reader.Read())
{
//创建班级对象
Grade gt = new Grade();
gt.Id = reader["classId"].ToString(); //班级编号
gt.SchoolName = reader["className"].ToString(); //班级名称
//将当前读取的班级添加到集合中
lstGrades.Add(gt);
}
//为DataGridView绑定数据源
dataGridView1.DataSource = lstGrades;
//更改表头信息
if (lstGrades.Count > 0)
{
dataGridView1.Columns[0].HeaderText = "班级编号";
dataGridView1.Columns[1].HeaderText = "班级名称";
}
}
//关闭Reader对象,同时会自动断开数据库连接
reader.Close();
}
/// <summary>
/// 调用Adapter查询所有班级
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
//准备Sql
string sql = "select * from MyClass";
//创建DataTable接收数据
DataTable dt = HuaXingHelper.HuaXingAdapter(sql, null);
//将接收到的数据绑定到DataGridView上
dataGridView1.DataSource = dt;
//更改表头信息
if (dt.Rows.Count > 0)
{
dataGridView1.Columns[0].HeaderText = "班级编号";
dataGridView1.Columns[1].HeaderText = "班级名称";
}
}