• 使用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)+@"datayangbiao.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)+@"datae1.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()+"	");
                    }
                    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();
            }

    运行结果:

  • 相关阅读:
    Http与WWW服务精解
    Http与WWW服务精解
    6-13
    好用的工具说明
    JVM、JRE和JDK三者间的区别和联系
    css进阶之二:flex弹性布局
    MVVM
    如何理解TCP的三次握手协议?
    java里面的设计模式
    linux常用命令
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/14710042.html
Copyright © 2020-2023  润新知