c#連接sqlserver數據庫


Command對象
作用:向數據庫發送SQL語句
封裝連接對象和執行的SQL語句
對數據庫執行具體的操作,提供增、刪、改、查的方法
屬性
CommandText 需要封裝的SQL語句或存儲過程名稱
Connection Command對象使用的數據庫連接對象
方法
ExecuteNonQuery() 執行增、刪、改操作
ExecuteScalar() 返回單一結果的查詢 只能返回數據集的第一行第一列 常常用來執行聚合函數
ExecuteReader() 返回只讀數據列表的查詢

ExecuteNonQuery() 方法使用要點
執行insert update delete類型的語句

執行返回受影響的行數、一般是大於0的整數,0說明沒有影響 ,-1表示執行出錯

執行增、刪、改步驟總結
1 創建Connection對象
2 組合sql語句insert update delete
3 創建Command對象 並封裝Connection和sql語句
4 打開連接
5 執行ExecuteNonQuery()方法,返回受影響的行數
6 關閉連接

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    
    class Program
    {
        string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
        SqlConnection conn = null;
        public void OpenDB()
        {
            conn = new SqlConnection(connString);
            if(conn.State==ConnectionState.Closed)
            {
                conn.Open();
            }
            Console.WriteLine("數據庫已連接");
        }
        public void CloseDB()
        {
            if(conn.State==ConnectionState.Open)
            {
                conn.Close();
            }
            Console.WriteLine("數據庫已斷開");
        }
        public int Insert(string sql)
        {
            SqlCommand cmd = new SqlCommand(sql, conn);//簡單寫法
            //SqlCommand cmd = new SqlCommand
            //{
            //    CommandText = sql,
            //    Connection = conn
            //};
            //ExecuteNonQuery()執行增 刪 改 操作
            int result = cmd.ExecuteNonQuery();//返回影響的行數
            return result;
        }
        
        static void Main(string[] args)
        {
            string sql = "insert into student(id,name,age,teacherID) values(5,'小王',25,105)";
            Program p = new Program();
            p.OpenDB();
            int insertResult = p.Insert(sql);
            Console.WriteLine("insertResult:{0}", insertResult);
            p.CloseDB();
            Console.ReadKey();
        }
    }
}

 讀取結果集

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    
    class Program
    {
        string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
        public void QueryAllStudents(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                Console.WriteLine("id:{0} name:{1} age:{2} teacherID:{3}", (int)reader["id"], (string)reader["name"], (int)reader["age"], (int)reader["teacherID"]);
            }
            reader.Close();//關閉讀取器
            conn.Close();
        }
        
        static void Main(string[] args)
        {
            string sql = "select * from student";
            Program p = new Program();
            p.QueryAllStudents(sql);
            Console.ReadKey();
        }
    }
}

讀取多個結果集 在sql server中我們可以這樣 select * from student; select * from teacher; 同時執行兩條查詢語句

在c# 中

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    
    class Program
    {
        string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
        public void QueryAllStudents(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                Console.WriteLine("id:{0} name:{1} age:{2} teacherID:{3}", (int)reader["id"], (string)reader["name"], (int)reader["age"], (int)reader["teacherID"]);
            }
            if(reader.NextResult())
            {
                while(reader.Read())
                {
                    Console.WriteLine("id:{0} name:{1} major:{2}", reader["id"], reader["name"], reader["major"]);
                }
            }
            reader.Close();//關閉讀取器
            conn.Close();
        }
        
        static void Main(string[] args)
        {
            string sql = "select * from student;select * from teacher";
            Program p = new Program();
            p.QueryAllStudents(sql);
            Console.ReadKey();
        }
    }
}

 實現一個簡單的SQL Helper類

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    class SQLHelper
    {
        private static string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
        public static int GetSingleQuery(string sql)//一般用於聚合函數的查詢
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            int result = (int)cmd.ExecuteScalar();
            conn.Close();
            return result;
        }
        public static int Update(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            int result = cmd.ExecuteNonQuery();//返回影響的行數
            conn.Close();
            return result;
        }
        public static SqlDataReader GetReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            //SqlDataReader reader = cmd.ExecuteReader();
            //reader.Close();
            //conn.Close(); //這樣寫會報閱讀器關閉時嘗試調用 Read 無效錯誤
            //解決方法
            SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);//關閉讀取器時自動關閉connection連接
            return reader;
        }
        static void Main(string[] args)
        {
            //測試代碼
            //string sql = "select * from student";
            //SqlDataReader reader = GetReader(sql);
            //while(reader.Read())
            //{
            //    Console.WriteLine("id:{0} name:{1} age:{2} teacherID:{3}", (int)reader["id"], reader["name"].ToString(), (int)reader["age"], (int)reader["teacherID"]);
            //}
            //reader.Close();//關閉讀取器

            //string sql = "select count(*) from student";
            //int result = GetSingleQuery(sql);
            //Console.WriteLine("result stu count:{0}", result);

            //string sql = "update student set name='小李' where name='小王'";
            //int result = Update(sql);
            //Console.WriteLine("update result:{0}", result);
            Console.ReadKey();
        }
    }
}
將查詢到的數據以對象的形式返回
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    class Test
    {
        private static string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
        public Student QueryStuByID(string sql)
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            Student stu = null; 
            if(reader.Read())
            {
                stu = new Student
                {
                    Id = (int)reader["id"],
                    Name = reader["name"].ToString(),
                    Age = (int)reader["age"],
                    TeacherID = (int)reader["teacherID"]
                };
            }
            reader.Close();
            conn.Close();
            return stu;
        }
        static void Main(string[] args)
        {
            //測試代碼
            //string sql = "select * from student where id=3";
            //Test t = new Test();
            //Student stu = t.QueryStuByID(sql);
            //if(stu!=null)
            //{
            //    Console.WriteLine("stu name:{0}", stu.Name);
            //}
            Console.ReadKey();
        }
    }
    class Student
    {
        private int id;
        private string name;
        private int age;
        private int teacherID;

        public int Id { get => id; set => id = value; }
        public string Name { get => name; set => name = value; }
        public int Age { get => age; set => age = value; }
        public int TeacherID { get => teacherID; set => teacherID = value; }
    }
}
將查詢到的數據以對象集合的方式返回 和上述代碼類似

連表查詢
 
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PracticeFive
{
    class Test
    {
        private static string connString = "server=DESKTOP-BQDF638;database=test_four;uid=sa;pwd=123456";
 
        public List<StudentTeacher> UnionQuery(string sql)//聯合查詢
        {
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            List<StudentTeacher> lstStuTea = new List<StudentTeacher>();
            while(reader.Read())
            {
                StudentTeacher stuTea = new StudentTeacher();
                stuTea.Stu = new Student
                {
                    Name = reader["stuName"].ToString()
                };
                stuTea.Tea = new Teacher
                {
                    Name = reader["teaName"].ToString(),
                    Major = reader["major"].ToString()
                };
                lstStuTea.Add(stuTea);
            }
            reader.Close();
            conn.Close();
            return lstStuTea;
        }
        static void Main(string[] args)
        {
            //因為學生表和老師表都有name字段 計算機無法區分 所有取別名來區分
            string sql = "select a.name as stuName,b.name as teaName,b.major from student a inner join teacher b on a.teacherID=b.id";
            Test test = new Test();
            List<StudentTeacher> lst = test.UnionQuery(sql);
            foreach(var item in lst)
            {
                Console.WriteLine("student name:{0} teacher name:{1} teacher major:{2}", item.Stu.Name, item.Tea.Name, item.Tea.Major);
            }
            Console.ReadKey();
        }
    }
    class Student
    {
        private int id;
        private string name;
        private int age;
        private int teacherID;

        public int Id { get => id; set => id = value; }
        public string Name { get => name; set => name = value; }
        public int Age { get => age; set => age = value; }
        public int TeacherID { get => teacherID; set => teacherID = value; }
    }
    class Teacher
    {
        private int id;
        private string name;
        private string major;

        public int Id { get => id; set => id = value; }
        public string Name { get => name; set => name = value; }
        public string Major { get => major; set => major = value; }
    }
    class StudentTeacher//聯合查詢時使用
    {
        private Student stu;
        private Teacher tea;

        internal Student Stu { get => stu; set => stu = value; }
        internal Teacher Tea { get => tea; set => tea = value; }
    }
}
 
         

 

 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM