新手C#SQLServer在程序裏實現語句的學習2018.08.12

從C#中鏈接到SQL Server數據庫,再經過C#編程實現SQL數據庫的增刪改查。sql

ado.net提供了豐富的數據庫操做,這些操做能夠分爲三個步驟:數據庫

  • 第一,使用SqlConnection對象鏈接數據庫;
  • 第二,創建SqlCommand對象,負責SQL語句的執行和存儲過程的調用;(在使用適配器查找記錄時不用創建sqlcommand對象)
  • 第三,對SQL或存儲過程執行後返回的「結果」進行操做。對結果的操做分爲兩種,一種爲SqlDataReader一行一行讀取數據集,另外一種爲DataSet聯合SqlDataAdapter讀取數據集。

 

1.打開鏈接通道:編程

        #region 打開鏈接通道
        /// <summary>
        ///1.鏈接通道的鏈接字符串
        ///2.鏈接通道對象
        ///3.打開通道
        ///4.關閉通道
        /// </summary>
        public static void OpenConnection()
        {
            //1.鏈接通道的鏈接字符串
            string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";//指定哪臺服務器
            //2.鏈接通道對象
            SqlConnection conn = new SqlConnection(conStr);
            //3.打開通道
            conn.Open();
            //4.關閉通道
            conn.Close();
            Console.WriteLine("鏈接對象新建操做成功");
        } 
        #endregion

 

2.增長記錄數組

        #region 增長記錄
        /// <summary>
        /// 增長記錄
        /// </summary>
        public static void AddRecord()
        {
            int res = -1;//準備比接受新增受影響的行數
            string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";
            //1.新建鏈接通道
            SqlConnection conn = new SqlConnection();
            //2.手動指定鏈接字符串
            conn.ConnectionString = conStr;
            //3.準備新增的sql命令
            string sqlStr = "insert into TEST(NAME) values('SHUAI')";
            //4.新建命令對象,而且告訴他走那條路(conn),作什麼事('sqlStr')單引號必定要加
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            //5.打開鏈接通道
            conn.Open();
            //6.調用方法去數據庫執行sql語句
            res = cmd.ExecuteNonQuery();//此方法負責增刪改,返回受影響的行數(int),開始進入數據庫進行操做
            //7.關閉鏈接通道
            conn.Close();
            if (res > 0)
            {
                Console.WriteLine("新增成功");
            }
            else
            {
                Console.WriteLine("新增失敗");
            }
        }
        #endregion

 

3.刪除記錄和更改記錄(軟刪除)與新增記錄的代碼相同,只有SQL語句不同,其SQL語句爲服務器

            //3.準備刪除的sql命令
            string sqlStr = "delete from TEST where ID=8";
            //3.準備修改的sql命令
            string sqlStr = "update TEST set NAME='qiang' where ID=7";

 

4.查詢單個值時,使用的是命令對象SqlCommand進行查詢ui

        #region 查詢單個值
        /// <summary>
        /// 查詢單個值
        /// </summary>
        public static void QuerySingle()
        {
            SqlConnection conn = new SqlConnection(conStr);
            //  string sqlStr = "select count(*) from TEST";
            string sqlStr = "select * from TEST";
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            conn.Open();
            //調用此方法,得到查詢語句在數據庫執行後獲得的結果集的第一個單元格的值,返回類型爲object
            object obj = cmd.ExecuteScalar();
            conn.Close();
            Console.WriteLine(obj.ToString());

        } 
        #endregion

 

5.讀取器查詢多行數據,逐行讀取,經過下標訪問數據,還能夠經過列名和get方法訪問數據spa

        #region 讀取器查詢多行數據,逐行讀取,經過get方法訪問數據
        /// <summary>
        /// 查詢多行數據——DataReader,逐行讀取
        /// </summary>
        public static void QueryListByGet()
        {
            SqlConnection conn = new SqlConnection(conStr);
            string sqlStr = "select * from TEST";
            SqlCommand cmd = new SqlCommand(sqlStr, conn);
            conn.Open();
            //調用此方法,得到一個讀取器對象,SqlDataReader不能實例化
            SqlDataReader dr = cmd.ExecuteReader();
            //if (dr.HasRows)//判斷有無數據
            //{
            //    Console.WriteLine("有數據");
            //}
            //else
            //{
            //    Console.WriteLine("無數據");
            //}
            if (dr.HasRows)
            {
                //每調用一次read,讀取一行數據
                while (dr.Read())//read方法,若是讀到下一行數據,則返回true,並且dr自己就等於哪一行數據
                {
                    //讀取第一列的數據
                    //Console.WriteLine(dr[0].ToString());//經過下標訪問數據,數組下標從0開始
                    //Console.WriteLine(dr["ID"].ToString());//經過列名訪問數據,以結果集的列名做爲標誌,能夠避免as爲別名後的查詢錯誤
                    Console.WriteLine(dr.GetString(1));//經過get訪問數據,數組下標從0開始,只能用於char類型的變量,不能獲取int類型的數據
                    Console.WriteLine(dr.GetInt32(0));//只能獲取int類型
                    Console.WriteLine(dr.GetValue(0).ToString());//以object的方式拿出數據
                    dr.GetOrdinal("ID");//傳入列名,得到列的下標

                }
            }
            else
                Console.WriteLine("無數據");
            //先關閉讀取器,再關閉鏈接通道
            dr.Close();
            conn.Close();
        }
        #endregion

 

6.適配器查詢多行數據.net

        #region 適配器查詢多行數據
        /// <summary>
        /// 使用適配器讀取數據,不須要代碼手動打開、關閉鏈接通道
        /// </summary>
        public static void QueryListByAdapter()
        {
            SqlConnection conn = new SqlConnection(conStr);
            string sqlStr = "select * from TEST";
            //建立適配器對象(SqlDataAdapter),告訴他作什麼事(sqlStr),走哪條路(conn)
            SqlDataAdapter sqlda = new SqlDataAdapter(sqlStr, conn);
            //建立數據集對象(程序端的臨時數據庫)
            DataSet ds = new DataSet();
            //調用fill方法,添加數據到數據集。(先去數據庫查詢結果集,並把結果集返回賦值給數據集)
            sqlda.Fill(ds);//開始進入數據庫進行操做
            DataTable dt = ds.Tables[0];//得到數據集中的第一張表(數據集能夠存放多張表)
            for (int i = 0; i < dt.Rows.Count; i++)//循環該表中的每一行,dt.Rows爲獲取該數據表的行集合
            {
                DataRow dr = dt.Rows[i];//dr對象獲取表中的當前行
                Console.WriteLine(dr[0].ToString());//經過索引的方式讀某一列的值
                Console.WriteLine(dr["ID".ToString()]);//經過列名的方式讀列
            }
        } 
        #endregion

 

 

2018.08.12code

相關文章
相關標籤/搜索