SQL Server 数据库连接方法

我们用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类的编程方法,开拓 思维。

现在编程都是用框架,这种提炼类的方法早已经被用的炉火纯青,但是对于初学者来说,这样自己提炼类对自己来说是一种好的锻炼,

连接数据库的方法还有很多,这里就写这两种。其中有错误的地方,希望指正。

 

posted @ 2017-05-03 21:58  第八种格调的男人  阅读(1350)  评论(0编辑  收藏  举报