我们用c#写ado或者是asp,都需要连接数据库来读写数据,今天我们就来总结一下数据库连接都有哪些方法。
首先我们就写最直接的方法,在事件中直接连接。(在这里就用WEB页面来展示)
首先我们建立web页面,简单的两个textbox控件和一个button控件就可以了。为了配置数据方便,我们在添加一个DataSource
配置数据源就是为了配置web.config里面的Configuration子节点connectionStrings
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\asp\DataLogin\DataLogin\App_Data\UserData.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
我们可以自己配置,但是在dataSource里面直接配置我觉得简单一点,也不用在记这些配置内容了。
下面我们就开始直接连接数据库了。
string username=Username.Text.Trim();
string password = Password.Text.Trim()
SqlDataReader dr;
System.Data.SqlClient.SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
//新建sqlCommand对象
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT [pass] FROM [UserInf] WHERE name=@loginname";
cmd.CommandType = CommandType.StoredProcedure; //CommandType.Text;
//添加查询参数对象,并给参数赋值
SqlParameter para = new SqlParameter("@loginname", SqlDbType.NVarChar,50);
para.Value = username;
cmd.Parameters.Add(para);
try
{
conn.Open();
//SqlCommand Cmd = new SqlCommand();
dr = cmd.ExecuteReader();// 将检索的记录行填充到DataReader对象中
if (dr.Read())
{
if (dr.GetString(0).Trim() == password)
{
// 登录成功后记下该用户登录名,以便后续功能使用
Session.Add("username", username);
Username.Text = "";
Response.Write("恭喜你,你已登录成功!");
}
else
{
Response.Write("用户名或者密码错误!");
}
}
else
{
Response.Write("对不起,用户不存在!");
}
}
catch (SqlException sqlException)
{
Response.Write(sqlException.Message); // 显示连接异常信息
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
这种连接数据库登陆的方式最直接,但是也最不容易维护,接下来我们就用添加helper类的方式连接数据库。
首先我们要建立一个Helper类,微软自己就有封装的Help类,我们可以直接下载一份,不过我们在这里最好是自己写一个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
namespace WebDemo
{
public class SqlHelper : IDisposable
{
SqlConnection conn = null;
public SqlHelper()
{
string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
conn = new SqlConnection(connStr);
conn.Open();
}
/// <summary>
/// 实现查询语句返回是否执行(0,1)
/// </summary>
/// <param name="sqlCmd"></param>
/// <returns></returns>
public int GetResult(string sqlCmd)
{
int result = 0;//0代表不存在
SqlCommand cmd = conn.CreateCommand();
cmd.ExecuteNonQuery();
cmd.CommandText = sqlCmd;
result = Convert.ToInt32(cmd.ExecuteScalar().ToString());
return result;
}
/// <summary>
/// 关闭数据库
/// </summary>
public void Dispose()
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
}
}
这里的SqlHelper实现了IDisposable IDisposable接口的主要用途是释放非托管资源。当不再使用托管对象时,垃圾回收器会自动释放分配给该对象的内存。
为了简单演示,我只写了三个函数,一个连接,一个查询,一个释放资源。微软的Help类不过是写了很多的重载方法,实现的功能都是按照这个模型来的。
这个Help类可以实现多次复用,维护变得好了很多,实现在Page页面里页就没有了业务逻辑,
protected void btnSubmit_Click(object sender, EventArgs e)
{
string userName = txtUserName.Text;
string userPass = txtPass.Text;
string sqlText = string.Format("SELECT count(*) FROM tblUser WHERE User_Name='{0}' AND User_PassWord='{1}'", userName, userPass);
int result = 0;
using (SqlHelper helper = new SqlHelper())
{
result = helper.GetResult(sqlText);
}
if (result == 0)
{
Page.RegisterStartupScript("loginError", "<script>window.alert('用户名或密码错误!')</script>");
}
else
{
Session["UserName"] = userName;
Response.Redirect("~/Index.aspx");
}
}
我们只要传入参数就可以了。
这里写两种简单的连接数据可的方式,就是为了展示提炼Help类的编程方法,开拓 思维。
现在编程都是用框架,这种提炼类的方法早已经被用的炉火纯青,但是对于初学者来说,这样自己提炼类对自己来说是一种好的锻炼,
连接数据库的方法还有很多,这里就写这两种。其中有错误的地方,希望指正。