使用C#訪問數據庫入門


寫在前面:

這里的代碼只是為了同學們學習的時候入門,很多該優化、簡寫的東西都沒有處理。

這種訪問數據庫的方法還存在嚴重的安全漏洞(sql注入漏洞),實際開發中禁止使用。

工作中可以使用改良后的類,安全,結構復雜,使用方法類似。不利於此處學習,故不在此列出。


數據庫操作類代碼:

  1 #define WIN
  2 //#define NET
  3 //********ACCESS要開類型和版本兩個******
  4 //#define ACCESS
  5 //#define ACCESS_2003
  6 //#define ACCESS_2010
  7 //********EXCEL開一個具體版本就行了******
  8 //(#define EXCEL)
  9 //#define EXCEL_2010
 10 //********************************
 11 #define SQLSERVER
 12 //(sql2000測試通過)
 13 //*******************************
 14 //#define MYSQL
 15 
 16 using System;
 17 using System.Collections.Generic;
 18 using System.Linq;
 19 using System.Text;
 20 using System.Data;
 21 using System.Data.OleDb;
 22 using System.Data.SqlClient;
 23 //using MySql.Data.MySqlClient;
 24 #if NET
 25     using System.Web;
 26 #endif
 27 
 28 namespace HC
 29 {
 30     //操作access等數據庫的類
 31     class Hc_db
 32     {
 33         public Hc_db()
 34         {
 35         }
 36 #if SQLSERVER
 37         static SqlConnection createConn()
 38 #elif MYSQL
 39             static MySqlConnection createConn()
 40 #else
 41             static OleDbConnection createConn()
 42 #endif
 43         {
 44 #if SQLSERVER
 45             string s1 = "server=(localdb)\\mssqllocaldb;initial catalog=d1;user ID=sa;password=123456;";
 46 #endif
 47 #if ACCESS_2003
 48                 string s1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
 49 #endif
 50 #if ACCESS_2010
 51                 string s1 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
 52 #endif
 53 #if ACCESS
 54 #if NET
 55                     string s2 =@HttpContext.Current.Server.MapPath(@"~/data/d1.accdb"); 
 56 #endif
 57 #if WIN
 58                     string s2 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)+@"\data\yangbiao.mdb"; 
 59 #endif
 60 #endif
 61 
 62 #if EXCEL_2010
 63                 string s1 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
 64 #if NET
 65                     string s2 =@HttpContext.Current.Server.MapPath(@"~/data/e1.xlsx")+";Extended Properties='Excel 12.0;HDR=YES'";//HDR=YES表示有標題
 66 #endif
 67 #if WIN
 68                     string s2 =System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)+@"\data\e1.xlsx"+";Extended Properties='Excel 12.0;HDR=YES'";//HDR=YES表示有標題
 69 #endif
 70             //說明:
 71                 //若要引用完全使用的工作表的范圍,請指定后面跟有美元符號的工作表名稱。例如: 
 72                 //select * from [Sheet1$] 
 73                 //若要引用工作表上的特定地址范圍,請指定后面跟有美元符號和該范圍的工作表名稱。例如: 
 74                 //select * from [Sheet1$A1:B10]
 75                 //關於IMEX:
 76                 //若為 0,則為輸出模式,此情況下只能用作寫入 Excel; 
 77                 //若為 1,則為輸入模式,此情況下只能用作讀取 Excel,並且始終將 Excel 數據作為文本類型讀取; 
 78                 //若為 2,則為連接模式,此情況下既可用作寫入、也可用作讀取。
 79                 //所以若要讀取混合數據類型,應該將 IMEX 設置為 1;若誤設置為 0,則讀取不到任何行;若誤設置為 2 或省略,則有些數據讀取出來是空白。
 80                 //注意:輸出模式對應寫入、輸入模式對應讀取。
 81 #endif
 82 #if MYSQL
 83             string s1 = "Database=ipt_authd;Data Source=10.10.XXX.XXX;User Id=XXXX;allow zero datetime=true";
 84             //標准寫法:myConnectionString = "Database=Test;Data Source=localhost;User Id=username;Password=pass";
 85 #endif
 86 #if SQLSERVER
 87             SqlConnection conn = new SqlConnection(s1);
 88 #elif MYSQL
 89                 MySqlConnection conn = new MySqlConnection(s1);
 90 #else
 91                 OleDbConnection conn = new OleDbConnection(s1+s2);
 92 #endif
 93             return conn;
 94         }
 95 
 96         public static DataTable get_datatable(string s1)
 97         {
 98 #if SQLSERVER
 99             SqlConnection myconn = Hc_db.createConn();
100             SqlDataAdapter myda = new SqlDataAdapter(s1, myconn);
101 #elif MYSQL
102                     MySqlConnection myconn = Hc_db.createConn();                
103                     MySqlDataAdapter myda = new MySqlDataAdapter(s1, myconn);
104 #else
105                 OleDbConnection myconn = Hc_db.createConn();
106                 OleDbDataAdapter myda = new OleDbDataAdapter(s1, myconn);
107 #endif
108             DataSet myds = new DataSet();
109             try
110             {
111                 myconn.Open();
112                 myda.Fill(myds, "No1");
113                 myconn.Close();
114                 //myconn.Dispose();
115                 return myds.Tables["No1"];
116             }
117             catch (Exception e1)
118             {
119                 throw (e1);
120             }
121         }
122         public static int do_nonquery(string s1)
123         {
124 #if SQLSERVER
125             SqlConnection myconn = Hc_db.createConn();
126             SqlCommand mycomm = new SqlCommand(s1, myconn);
127 #elif MYSQL
128                 MySqlConnection myconn = Hc_db.createConn();
129                 MySqlCommand mycomm = new MySqlCommand(s1, myconn);
130 #else
131             OleDbConnection myconn = Hc_db.createConn();
132             OleDbCommand mycomm = new OleDbCommand(s1, myconn);
133 #endif
134             try
135             {
136                 int c;
137                 myconn.Open();
138                 c = mycomm.ExecuteNonQuery();
139                 myconn.Close();
140                 //myconn.Dispose();
141                 return c;
142             }
143             catch (Exception e1)
144             {
145                 //HttpContext.Current.Response.Write("<script language='javascript' defer>alert('" + e1.ToString() + "');</script>");
146                 throw (e1);
147                 //return false;
148             }
149         }
150     }
151 }
152 //INSERT INTO 表 [(字段1[,字段2[, ...]])]
153 ////VALUES (值1[,值2[, ...])
154 //            string str_sql = "insert into myt1(姓名,性別,年齡) values('"+textBox2.Text+"','"+textBox3.Text+"',"+textBox4.Text+")";

 

以上代碼可用作控制台下操作localdb數據庫。對於其他的sqlserver,修改第45行信息。

在mvc等web環境下使用,修改前兩行即可。

數據庫內容如下:

 

 控制台程序如下:

 static void Main(string[] args)
        {
            DataTable dt;
            string sql;
            sql = "select * from t1";
            dt = Hc_db.get_datatable(sql);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    Console.Write(dt.Rows[i][j].ToString()+"\t");
                }
                Console.WriteLine(); ;
            }
            Hc_db.do_nonquery("delete from t1 where xm='ls'");
            dt = Hc_db.get_datatable(sql);
            Console.WriteLine(dt.Rows.Count);
            Console.ReadKey();
        }

運行結果:

 


免責聲明!

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



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