一、查詢首行首列
// 查詢電影數量的SQL語句 string sql = "select count(*) from FilmInfo"; // 連接字符串 string conStr = "server=.;database=FilmDB;uid=sa;pwd=123456;"; // 創建連接對象 SqlConnection conn = new SqlConnection(conStr); // 打開連接 conn.Open(); // 創建Command對象 SqlCommand cmd = new SqlCommand(sql, conn); // 查詢首行首列 int number = (int)cmd.ExecuteScalar(); // 輸出結果 Console.WriteLine("一共有{0}部電影!",number); // 關閉連接 conn.Close(); Console.ReadKey();
二、DataReader
2.1、簡介
- DataReader 是只讀只進的數據流;
- 使用 DataReader 讀取數據的過程,始終需要與數據庫保持連接;
- 每次只能讀取一行數據,通過循環可以讀取多行數據。
2.2、創建 DataReader 對象
SqlDataReader dr = cmd.ExecuteReader(); // cmd是可用的Command對象
2.3、常用方法
while(dr.Read()) // dr是可用的SqlDataReader對象,通過循環進行數據讀取 { // 讀取數據 } dr.Close(); // 關閉SqlDataReader對象
2.4、讀取數據
int ID = (int)dr[0]; // 編號 string name = dr[1].ToString(); // 電影名稱 string typeName = dr[2].ToString(); // 電影類型 string actors = dr[3].ToString(); // 演員列表 int amount = (int)dr[4]; // 庫存數量 decimal price = (decimal)dr[5]; // 價格 string desc = dr[6].ToString(); // 描述
int ID = (int)dr["ID"]; // 編號 string name = dr["Name"].ToString(); // 電影名稱 string typeName = dr["TypeName"].ToString(); // 電影類型 string actors = dr["Actors"].ToString(); // 演員列表 int amount = (int)dr["Amount"]; // 庫存數量 decimal price = (decimal)dr["Price"]; // 價格 string desc = dr["Desc"].ToString(); // 描述
三、案例
3.1、查詢全部電影信息
static void Main(string[] args) { // 連接字符串 string conStr = "server=.;database=FilmDB;uid=sa;pwd=123456;"; // 查詢所有電影信息的SQL語句 string sql = " select * from FilmInfo "; // 創建Connection對象 SqlConnection conn = new SqlConnection(conStr); // 打開連接 conn.Open(); // 創建Command對象 SqlCommand cmd = new SqlCommand(sql, conn); // 創建DataReader對象 SqlDataReader dr = cmd.ExecuteReader(); Console.WriteLine("============ 所有電影信息如下 ============"); // 通過循環讀取所有數據 while (dr.Read()) { // 讀取每列的值 int ID = (int)dr[0]; string name = dr[1].ToString(); string typeName = dr[2].ToString(); string actors = dr[3].ToString(); int amount = (int)dr[4]; decimal price = (decimal)dr[5]; string desc = dr[6].ToString(); // 輸出 Console.WriteLine("電影編號:{0}", ID); Console.WriteLine("電影名稱:{0}", name); Console.WriteLine("電影類型:{0}", typeName); Console.WriteLine("演員列表:{0}", actors); Console.WriteLine("庫存數量:{0}", amount); Console.WriteLine("價格:{0}", price); Console.WriteLine("描述:{0}", desc); Console.WriteLine("------------------------------------"); } // 關閉DataReader對象 dr.Close(); // 關閉連接 conn.Close(); Console.WriteLine("\n恭喜,查詢完成!"); Console.ReadKey(); }
3.2.根據編號查詢某部電影信息
static void Main(string[] args) { Console.Write("輸入要查詢電影的編號:"); int id = int.Parse(Console.ReadLine()); // 連接字符串 string conStr = "server=.;database=FilmDB;uid=sa;pwd=123456;"; // 根據編號查詢電影的SQL語句 string sql = string.Format("select * from FilmInfo where ID='{0}'",id); // 創建Connection對象 SqlConnection conn = new SqlConnection(conStr); // 打開連接 conn.Open(); // 創建Command對象 SqlCommand cmd = new SqlCommand(sql, conn); // 創建DataReader對象 SqlDataReader dr = cmd.ExecuteReader(); Console.WriteLine("============電影信息如下 ============"); // 讀取數據 if(dr.Read()) { // 讀取每列的值 int ID = (int)dr[0]; string name = dr[1].ToString(); string typeName = dr[2].ToString(); string actors = dr[3].ToString(); int amount = (int)dr[4]; decimal price = (decimal)dr[5]; string desc = dr[6].ToString(); // 輸出 Console.WriteLine("電影編號:{0}", ID); Console.WriteLine("電影名稱:{0}", name); Console.WriteLine("電影類型:{0}", typeName); Console.WriteLine("演員列表:{0}", actors); Console.WriteLine("庫存數量:{0}", amount); Console.WriteLine("價格:{0}", price); Console.WriteLine("描述:{0}", desc); Console.WriteLine("------------------------------------"); } // 關閉DataReader對象 dr.Close(); // 關閉連接 conn.Close(); Console.WriteLine("\n恭喜,查詢完成!"); Console.ReadKey(); }
3.3、根據電影名稱關鍵字查詢電影信息
static void Main(string[] args) { Console.Write("輸入要查詢電影的名稱:"); string key = Console.ReadLine(); // 連接字符串 string conStr = "server=.;database=FilmDB;uid=sa;pwd=123456;"; // 根據關鍵字查詢電影的SQL語句 string sql = string.Format(@"select * from FilmInfo where Name like '{0}'","%"+key+"%");; // 創建Connection對象 SqlConnection conn = new SqlConnection(conStr); // 打開連接 conn.Open(); // 創建Command對象 SqlCommand cmd = new SqlCommand(sql, conn); // 創建DataReader對象 SqlDataReader dr = cmd.ExecuteReader(); Console.WriteLine("============電影信息如下 ============"); // 通過循環讀取數據 while (dr.Read()) { // 讀取每列的值 int ID = (int)dr[0]; string name = dr[1].ToString(); string typeName = dr[2].ToString(); string actors = dr[3].ToString(); int amount = (int)dr[4]; decimal price = (decimal)dr[5]; string desc = dr[6].ToString(); // 輸出 Console.WriteLine("電影編號:{0}", ID); Console.WriteLine("電影名稱:{0}", name); Console.WriteLine("電影類型:{0}", typeName); Console.WriteLine("演員列表:{0}", actors); Console.WriteLine("庫存數量:{0}", amount); Console.WriteLine("價格:{0}", price); Console.WriteLine("描述:{0}", desc); Console.WriteLine("------------------------------------"); } // 關閉DataReader對象 dr.Close(); // 關閉連接 conn.Close(); Console.WriteLine("\n恭喜,查詢完成!"); Console.ReadKey(); }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; //引入 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("***************用戶登錄***************"); Console.Write("用戶名:"); String uid = Console.ReadLine(); Console.Write("密碼:"); String pwd = Console.ReadLine(); //輸入用戶名與密碼 String connStr = "server=.;uid=sa;pwd=sa;database=School;"; //連接字符串 SqlConnection conn = new SqlConnection(connStr); //連接對象 String sql = String.Format("SELECT [id],[uid],[pwd],[name],[mobile] FROM [users] where uid='{0}'", uid); //將執行的SQL SqlCommand cmd = new SqlCommand(sql, conn); //命令對象 conn.Open(); //打開數據庫 SqlDataReader dr = cmd.ExecuteReader(); //執行讀取 if (dr.Read()) //下移取數據 { String pwdDb = dr["pwd"].ToString(); //根據用戶名獲取數據庫中的密碼 if (pwdDb == pwd) //如果輸入的密碼與數據庫中的密碼一樣 { Console.WriteLine("登錄成功,歡迎您:"+dr["name"].ToString()); //提示登錄成功 }else { Console.WriteLine("密碼錯誤,請重試。"); //提示密碼錯誤 } }else //如果下移失敗則用戶不存在 { Console.WriteLine("用戶不存在"); } dr.Close(); conn.Close(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace SchoolMIS { class Program { static void Main(string[] args) { Console.WriteLine("*********************學員管理系統登錄*********************"); Console.Write("用戶名:"); string uid = Console.ReadLine(); Console.Write("密碼:"); string pwd = Console.ReadLine(); String connStr = "server=.;database=School;uid=sa;pwd=sa;"; SqlConnection conn = new SqlConnection(connStr); String sql = string.Format("select COUNT(*) from users where uid='{0}' and pwd='{1}'",uid,pwd); SqlCommand cmd = new SqlCommand(sql, conn); conn.Open(); int count=Convert.ToInt32(cmd.ExecuteScalar()); //取單行單列的值 conn.Close(); if (count > 0) { Console.WriteLine("登錄成功,歡迎進入本系統"); } else { Console.WriteLine("驗證失敗,請重試"); } } } }


五、SQL輔助工具類
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace DB { public class SQLHelper { //只讀的靜態數據庫連接字符串 public static readonly string connString ="server=.;database=School;uid=sa;pwd=sa"; #region 執行 增 刪 改 /// <summary> /// 執行 增 刪 改 /// </summary> /// <param name="sql">要執行的SQL</param> /// <param name="param">參數</param> /// <returns>影響行數</returns> public static int Zsg(string sql,params SqlParameter[] param) { //實例化連接對象,並指定連接字符串,自動釋放資源,不用關閉 using (SqlConnection conn = new SqlConnection(connString)) { //實例化命令對象,指定sql,與連接對象 using (SqlCommand cmd = new SqlCommand(sql, conn)) { //如果有參數 if (param != null) { //批量添加參數 cmd.Parameters.AddRange(param); } //打開連接 conn.Open(); //執行sql並返回影響行數 return cmd.ExecuteNonQuery(); } } } #endregion #region 執行 查詢 /// <summary> /// 執行 查詢 /// </summary> /// <param name="sql">要執行的SQL</param> /// <param name="param">參數</param> /// <returns>數據集</returns> public static SqlDataReader Cx(string sql,params SqlParameter[] param) { //實例化連接對象,並指定連接字符串 SqlConnection conn = new SqlConnection(connString); //實例化命令對象,指定sql,與連接對象 using (SqlCommand cmd = new SqlCommand(sql, conn)) { //如果有參數 if (param != null) { //批量添加參數 cmd.Parameters.AddRange(param); } //打開連接 conn.Open(); //執行sql並返回影響行數,如果將返回的SqlDataReader關閉時也將關閉連接 return cmd.ExecuteReader(CommandBehavior.CloseConnection); } } #endregion #region 完成數據的查詢,返回DataTable /// <summary> /// 表格 完成數據的查詢,返回DataTable /// </summary> /// <param name="sql">要執行的sql</param> /// <param name="param">參數</param> /// <returns>DataTable</returns> public static DataTable Bg(string sql,params SqlParameter[] param) { //實例化連接對象,並指定連接字符串,自動釋放資源,不用關閉 using (SqlConnection conn = new SqlConnection(connString)) { SqlDataAdapter adp = new SqlDataAdapter(sql, conn); if (param != null) { adp.SelectCommand.Parameters.AddRange(param); } DataTable dt = new DataTable(); adp.Fill(dt); return dt; } } #endregion } }
增刪除改示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { String sql = @"INSERT INTO [School].[dbo].[users] ([uid] ,[pwd] ,[name] ,[mobile]) VALUES ('user007' ,'123567' ,'李小軍' ,'18890909987')"; //執行並返回影響行數 int row=DB.SQLHelper.Zsg(sql); if(row>0) { Console.WriteLine("執行成功"); } else { Console.WriteLine("執行失敗"); } } } }
查詢示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { String sql=@"SELECT [id] ,[uid] ,[pwd] ,[name] ,[mobile] FROM [School].[dbo].[users]"; SqlDataReader dr=DB.SQLHelper.Cx(sql); while (dr.Read()) { Console.WriteLine(dr["id"].ToString()); Console.WriteLine(dr["uid"].ToString()); Console.WriteLine(dr["pwd"].ToString()); Console.WriteLine(dr["name"].ToString()); Console.WriteLine(dr["mobile"].ToString()); Console.WriteLine("============================="); } dr.Close(); } } }
六、音像店管理系統實現
1、展示菜單


2、添加電影



3、電影列表



4、刪除電影



5、修改電影



6、根據關鍵字查詢電影



7、創建用戶表

用戶編號id、用戶名uid、密碼pwd、name姓名、email郵箱
8、注冊用戶



9、權限管理



10、用戶登錄


11、多級菜單




12、項目開發計划
一、項目介紹
這里寫同項目的意義與背景,為什么做這個項目,能解決什么問題,帶來什么好處。
二、項目功能
用戶管理 - > 張三
添加用戶、刪除用戶、修改密碼、查詢用戶、更新用戶、退出系統
圖書管理 - > 李四
新書上架.....................
三、進度計划
2020-05-26 完成用戶管理
。。。。。。
2020-06-21 整合
2020-06-22 測試
13、調用三方服務
天氣: http://ws.webxml.com.cn/WebServices/WeatherWebService.asmx
http://www.webxml.com.cn
using ConsoleApplication12.cn.com.webxml.ws; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication12 { class Program { static void Main(string[] args) { Console.Write("請輸入城市名稱:"); string city = Console.ReadLine(); WeatherWebService wws = new WeatherWebService(); String[] result=wws.getWeatherbyCityName(city); for (int i = 0; i < result.Length; i++) { Console.WriteLine(result[i]); } } } }
手機號碼:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
using ConsoleApplication13.cn.com.webxml.ws; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication13 { class Program { static void Main(string[] args) { Console.Write("請輸入一個手機號碼:"); String code=Console.ReadLine(); MobileCodeWS mcws = new MobileCodeWS(); String info=mcws.getMobileCodeInfo(code, ""); Console.WriteLine(info); } } }
14、寫文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication14 { class Program { static void Main(string[] args) { String content = Console.ReadLine(); //寫在當前項目運行的位置 File.WriteAllText(Environment.CurrentDirectory+@"\print.html",content); //指定寫入目錄 //File.WriteAllText(@"c:\hello.txt",content); } } }
private static void Dayin() { String sql = @"SELECT [ID],[Name] ,[TypeName],[Actors] ,[Amount],[Price],[Desc] FROM [FilmInfo]"; SqlDataReader dr = DB.SQLHelper.Cx(sql); String content = "<h1>電影清單</h1><table width='100%' border=1>"; while (dr.Read()) { content += "<tr>"; content+= "<td>"+dr["ID"].ToString()+"</td>"; content += "<td>" + dr["Name"].ToString() + "</td>"; content += "<td>" + dr["TypeName"].ToString() + "</td>"; content += "<td>" + dr["Actors"].ToString() + "</td>"; content += "<td>" + dr["Amount"].ToString() + "</td>"; content += "<td>" + dr["Price"].ToString() + "</td>"; content += "</tr>"; } content += "</table><button onclick='print()'>打印</button>"; dr.Close(); String path = Environment.CurrentDirectory + @"\print.html"; File.WriteAllText(path, content); Process.Start(path); }
15、讀文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication15 { class Program { static void Main(string[] args) { //讀取c:\hello.txt中的所有內容(字符串) String content=File.ReadAllText(@"c:\hello.txt"); Console.WriteLine(content); //讀取c:\hello.txt中的每一行,存放到數組中 String[] lines = File.ReadAllLines(@"c:\hello.txt"); Console.WriteLine(lines[3]); for (int i = 0; i < lines.Length; i++) { Console.WriteLine(lines[i]); } } } }
16、導入
private static void Daoru() { String sql = @"INSERT INTO [FilmDB].[dbo].[FilmInfo] ([Name] ,[TypeName] ,[Actors] ,[Amount] ,[Price] ,[Desc]) VALUES ('{0}' ,'{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}')"; String[] data=File.ReadAllLines(@"c:\movie.txt"); String name = data[0]; String typeName = data[1]; String actors = data[2]; String amount = data[3]; String price = data[4]; String desc = data[5]; sql = String.Format(sql, name, typeName, actors, amount, price, desc); int row = DB.SQLHelper.Zsg(sql); if (row > 0) { Console.WriteLine("導入成功!"); } else { Console.WriteLine("導入失敗!"); } }
17、二維數組
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication16 { class Program { static void Main(string[] args) { //1 int[,] score = new int[3,2]; score[0,0] = 90; score[0,1] = 80; score[1, 0] = 85; score[1, 1] = 59; score[2, 0] = 88; score[2, 1] = 91; for (int i = 0; i < score.GetLength(0); i++) { for (int j = 0; j < score.GetLength(1); j++) { Console.Write(score[i, j] + "\t"); } Console.WriteLine(); } int[,] s2 = new int[,]{ {1,3}, {2,4}, {1,3} }; //2 int[][] s3 = new int[3][]; s3[0] = new int[] {10,20 }; s3[1] = new int[] { 30, 40 ,50}; s3[2] = new int[2]; s3[2][0] = 90; for (int i = 0; i < s3.Length; i++) { for (int j = 0; j < s3[i].Length; j++) { Console.Write(s3[i][j]+"\t"); } Console.WriteLine(); } } } }
七、作業
上機目標
1、掌握數據庫輔助類的編寫及使用;
2、仿照章節案例,完成綜合性的上機任務;
上機任務一(30分鍾內完成)
上機目的
編寫數據庫輔助類;
上機要求
1、使用第一章課后上機的學生管理數據庫;
2、在VS中創建學生管理項目,命名為StudentManageSystem;
3、在該項目中編寫用於數據庫操作的輔助類。
上機任務二(20分鍾內完成)
上機目的
實現學生管理項目主界面的打印和進行功能選擇;
上機要求
1、編寫函數,打印系統操作界面以及實現功能選擇;當用戶輸入1~4之間數字時,根據輸入值進行相應操作;當用戶輸入5時,提示“程序結束!”;當用戶輸入不在1~5之間時,提示“輸入錯誤,沒有這個功能!”;
2、編譯運行結果如圖所示:
上機任務三(50分鍾內完成)
上機目的
實現學生信息的添加、修改和刪除功能;
上機要求
1、分別編寫添加學生、修改學生和刪除學生信息的方法,通過調用這些方法完成相應操作;完成操作后都要返回到主界面;
2、編譯運行結果如下所示:
(1)添加學生信息的效果:

(2)修改學生信息的效果:(根據學號來修改學生的其它信息)

(3)刪除學生信息的效果:(根據學號來刪除學生信息,刪除時要詢問是否確定刪除)

上機任務四(40分鍾內完成)
上機目的
實現學生信息的查詢功能;
上機要求
1、編寫查詢所有學生信息的方法;
2、編譯運行結果如圖所示:

