闪电龟龟--笔记

万物寻其根,通其堵,便能解其困。
  博客园  :: 新随笔  :: 管理

C# 数据库

Posted on 2019-02-21 22:39  闪电龟龟  阅读(692)  评论(0编辑  收藏  举报

连接:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// 引入数据库管理控件
using System.Data;
using System.Data.SqlClient;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection();  // 初始化一个SqlConnection()类
            conn.ConnectionString = "server=NAMEJR-PC;database=pc_test;uid=sa;pwd=****";  // 连接字符串,格式(注意间隔要使用分号(";")来做分割):"server=数据库名称(据说可以使用"."来表示本地数据库,没试过);database=数据库;uid=账号;pwd=密码"。注:如果使用的是"."进行登陆的话,可以将uid和pwd换成"integrated security=SSPI"即:"server=.;database=数据库名;integrated security=SSPI";
            conn.Open();  // 打开数据库
            SqlCommand comm = new SqlCommand();  // 初始化SqlCommand()类
            comm.Connection = conn;  // 获取连接指针
            comm.CommandType = CommandType.Text;  // 执行的方式,表示以SQL方式执行,另外还有CommandType.StoredProcedure(存储进程方式)。这个在"https://www.cnblogs.com/namejr/p/10398433.html"再讲。
            comm.CommandText = "select * from student;";  // SQL命令
            SqlDataReader dr = comm.ExecuteReader();  // 生成SqlDataReader
            dr.Close();  // 关闭SqlDataReader对象
            conn.Close();  // 关闭数据库连接
        }
    }
}
// 判断其状态是否处于关闭状态
                if (coon.State != ConnectionState.Closed)
                {
                    coon.Close();
                    Console.WriteLine("成功关闭!");
                }

 

 

Connection

使用web.config存放公共信息,有两种方式:1.appsettings。2.connectionstrings

1.使用appsettings:

Web.config:
<?xml version="1.0" encoding="utf-8"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <appSettings>
    <add key="cn" value="server=NAMEJR-PC;database=pc_test;uid=sa;pwd=****;"/>
  </appSettings>
 ............. </configuration> ///////////////////////////////////////////////////////////////////////////////// WebForm1.aspx: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // } protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = System.Web.Configuration.WebConfigurationManager.AppSettings["cn"]; try { conn.Open(); this.Literal1.Text = "连接数据库成功..."; }catch(Exception ex) { this.Literal1.Text = ex.Message; } finally { if (conn.State != ConnectionState.Closed) { conn.Close(); } } } } }

2.以connectionStrings方式:

Web.Config:
<?xml version="1.0" encoding="utf-8"?>
<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <connectionStrings>
    <add name="cn" connectionString="server=NAMEJR-PC;database=pc_test;uid=sa;pwd=****;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>
/////////////////////////////////////////////////////////////////////////////
WebForm1.apsx:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["cn"].ConnectionString;
            try
            {
                conn.Open();
                this.Literal1.Text = "连接数据库成功...";
            }catch(Exception ex)
            {
                this.Literal1.Text = ex.Message;
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }
            }
        }
    }
}

 

command:

三个属性:connection、commandType、commandText

三个方法:ExecuteReader()、ExecuteScalar()、ExecuteNonQuery()

ASPX:
<div>
        姓名:<asp:TextBox ID="TextBoxName" runat="server"></asp:TextBox>
        <br />
        年龄:<asp:TextBox ID="TextBoxAge" runat="server"></asp:TextBox>
        <br />
        性别:<asp:TextBox ID="TextBoxSex" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><asp:Literal ID="Literal1" runat="server"></asp:Literal>
        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
    </div>
////////////////////////////////////////////////////////////////////////////////////////////\
CS:
protected void Page_Load(object sender, EventArgs e)
        {
            //
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = WebConfigurationManager.ConnectionStrings["cn"].ConnectionString;
            try
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandType = CommandType.Text;
                int Sex = (this.TextBoxSex.ToString() == "") ? 1 : 0;
                conn.Open();  // 打开数据库
                // comm.CommandText = string.Format("insert into student(name,age,sex) values('{0}',{1},{2})", this.TextBoxName.Text.ToString(), this.TextBoxAge.Text.ToString(), Sex);
                // int columns = comm.ExecuteNonQuery();  // 返回受影响的行数
                // this.Literal1.Text = string.Format("连接数据库成功,插入{0}行", columns);
                //
                // comm.CommandText = "select count(*) from student";
                // object columns = comm.ExecuteScalar();  // 只返回一列一行的结果
                // this.Literal1.Text = string.Format("这个表一共有{0}行",columns);
                //
                comm.CommandText = "select name,age,sex from student";
                SqlDataReader dr = comm.ExecuteReader();  // 获取全部搜索出来的对象
                // 进行数据绑定
                this.GridView1.DataSource = dr;
                this.GridView1.DataBind();
            }catch(Exception ex)
            {
                this.Literal1.Text = ex.Message;
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }
            }
        }

 

SqlDataAdapter:

先来简单介绍dataset和datatable

static void Main(string[] args)
        {
            DataSet ds = new DataSet();  // 定义一个数据集
            DataTable dt = new DataTable();  // 定义一个数据表
            dt.TableName = "jr";  // 添加表名
            DataColumn column0 = new DataColumn();  // 定义其中一列
            column0.DataType = typeof(int);  // 定义该列的类型
            column0.AllowDBNull = false;  // 定义该列为非空
            column0.ColumnName = "ID";  // 定义列的名称
            dt.Columns.Add(column0);  // 将该行添加到数据表
            DataColumn column1 = new DataColumn();
            column1.DataType = typeof(string);
            column1.ColumnName = "NAME";
            dt.Columns.Add(column1);
            // 添加数据方式1
            dt.Rows.Add(1, "namejr");  // 添加一行
            // 添加数据方式2
            var row0 = dt.NewRow();
            row0[0] = 2;  // 按下标/索引添加
            row0["NAME"] = "name";  // 按键添加
            ds.Tables.Add(dt);  // 添加到数据集
            //
            // 读取数据
            object obj = ds.Tables[0].Rows[0]["NAME"];
            Console.WriteLine(obj);
        }

SqlDataAdapter

using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;

        protected void Page_Load(object sender, EventArgs e)
        {
            //
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            /*
            // 简便写法:
            SqlDataAdapter da = new SqlDataAdapter("select name,age,sex from student", WebConfigurationManager.ConnectionStrings["cn"].ConnectionString);  // 使用SqlDataAdapter不需要使用open/close打开或者关闭数据库
            DataSet ds = new DataSet();  // 数据缓存
            da.Fill(ds, "S");  // 填充。fill可以给取出来的缓存表进行取别名
            this.GridView1.DataSource = ds.Tables["S"];
            this.GridView1.DataBind();
            */
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = WebConfigurationManager.ConnectionStrings["cn"].ConnectionString;
            try
            {
                SqlCommand comm = new SqlCommand();  // 创建command
                comm.Connection = conn;  // 获取连接配置信息
                comm.CommandType = CommandType.Text;  // 以SQL语句方式执行
                comm.CommandText = "select name,age,sex from student";  // SQL语句
                SqlDataAdapter da = new SqlDataAdapter();  // 同上
                da.SelectCommand = comm;  // 执行操作。此外还有InsertCommand/DeleteCommand/UpdateCommand
                DataSet ds = new DataSet();
                da.Fill(ds, "S");
                this.GridView1.DataSource = ds.Tables["S"];
                this.GridView1.DataBind();
            }
            catch(Exception err)
            {
                this.Label1.Text = err.Message;
            }
        }    

 ExecuteReader():只读,向前,独占连接,效率高

 

protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = WebConfigurationManager.ConnectionStrings["cn"].ConnectionString;
            try
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandType = CommandType.Text;
                /*
                // 只对一个结果集进行读取
                comm.CommandText = "select name,age,sex from student";
                conn.Open();
                SqlDataReader dr = comm.ExecuteReader();
                // dr.Read()向下读取一条数据,存在数据返回true,不存在数据返回false
                while (dr.Read())
                {
                    // 使用下标做索引(有装箱拆箱操作)
                    //this.TextBox1.Text += string.Format("NAME:{0}, AGE:{1}, SEX:{2}\r\n", dr[0], dr[1], dr[2]);
                    // 使用表名做索引(有装箱拆箱操作)
                    //this.TextBox1.Text += string.Format("NAME:{0}, AGE:{1}, SEX:{2}\r\n", dr["name"], dr["age"], dr["sex"]);
                    //
                    // 还有一种r.GetXXX(i),不需要进行装箱拆箱,但是必须对应其属性,例如:dr.GetInt32(1)
                }*/
                //
                // 对两个结果集进行操作
                comm.CommandText = "select name,age from student;select sex from student";  // 获取到的是两个结果集
                conn.Open();
                SqlDataReader dr = comm.ExecuteReader();
                while (dr.Read())
                {
                    this.TextBox1.Text += string.Format("NAME:{0}, AGE:{1}\r\n", dr["name"], dr["age"]);
                }
                dr.NextResult();  // 转到下一个结果集
                while (dr.Read())
                {
                    this.TextBox1.Text += string.Format("SEX:{0}\r\n", dr["sex"]);
                }
            }
            catch (Exception err)
            {
                this.Label1.Text = err.Message;
            }
            finally
            {
                if (conn.State != ConnectionState.Closed)
                {
                    conn.Close();
                }
            }
        }