zoukankan      html  css  js  c++  java
  • 使用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();
            }

    运行结果:

  • 相关阅读:
    LeetCode 811. Subdomain Visit Count (子域名访问计数)
    LeetCode 884. Uncommon Words from Two Sentences (两句话中的不常见单词)
    LeetCode 939. Minimum Area Rectangle (最小面积矩形)
    LeetCode 781. Rabbits in Forest (森林中的兔子)
    LeetCode 739. Daily Temperatures (每日温度)
    三种方式实现按钮的点击事件
    239. Sliding Window Maximum
    14.TCP的坚持定时器和保活定时器
    13.TCP的超时与重传
    12.TCP的成块数据流
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/14710042.html
Copyright © 2011-2022 走看看