C#连接数据库方式,Access,SQL Server,Oracle,MySQL,IBM DB2 ,SyBase,excel等,[bubufx分享asp.net基础]

现在的业务系统都离不开数据库,编程语言与数据库连接是最基本的asp.net学习基础,所以,先弄清楚了C#链接数据库,工作才真正开始。最常用的数据库就是微软的Access和SQL Server,Oracle在工作中也常用到,MySQL在讲究版权的公司里也会出现,IBM DB2 ,SyBase相对稀罕。

asp.net中支持的语言很多,最最常用的也就是C#了,vb.net也常见,基本上是熟悉vb的一直在延续着。

1、连接Access数据库

Access数据库的链接需要引用“System.Data.OleDb”命名空间。先看一个示例:

using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace code
{
    class DB
    {
        public string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("/_dt/bubufx.mdb");

        public DataTable GetDt(string sql)
        {
            DataSet ds = new DataSet();
            OleDbConnection conn = new OleDbConnection(connStr);

            if (conn.State == ConnectionState.Closed) conn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);

            da.Fill(ds);
            conn.Close();
            return ds.Tables[0];
        }

        public int RunSql(string sql)
        {
            try
            {
                OleDbConnection conn = new OleDbConnection(connStr);

                if (conn.State == ConnectionState.Closed) conn.Open();
                OleDbCommand comm = new OleDbCommand(sql, conn);

                comm.ExecuteNonQuery(); conn.Close();
                return 1;
            }
            catch { return 0; }
        }


    }
}

这是一个链接access的类,直接使用也可。调用“GetDt”可运行select等返回datatable,调用“RunSql”可直接运行insert、update、delete等语句。链接字符串是"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("/_dt/bubufx.mdb"),在页面中就不必“System.Web.HttpContext.Current.Server.MapPath("/_dt/bubufx.mdb")”这么长,直接Server.MapPath("/_dt/bubufx.mdb")即可。

各种版本的access链接字符串并不相同:

Access 2000:“provider=Microsoft.Jet.Oledb.3.5;Data Source=Access数据库文件路径”
Access 2003:“provider=Microsoft.Jet.Oledb.4.0;Data Source=Access数据库文件路径”
Access 2007:“provider=Microsoft.Ace.Oledb.12.0;Data Source=Access数据库文件路径”
Access数据库只提供两个连接属性provider(数据提供程序)和data source(数据源);
Access2000\2003的文件格式是“。mdb”,Access2007的文件格式是“。accdb”;
Access的数据提供程序版本是向下兼容的,在Win7下测试使用Microsoft.Jet.OLEDB.3.5提示“未在本地计算机上注册“Microsoft.Jet.OLEDB.3.5”提供程序。”,改用Microsoft.Jet.OLEDB.4.0或者Microsoft.Ace.OLEDB12.0完全可以访问Access2000的数据库文件。当然也可以尝试使用微软提供的MDAC 来修改provider的版本。


2、连接SQL Server数据库

SQL Server数据库的链接需要用到“System.Data.SqlClient”命名空间,先看一个示例:

using System;
using System.Collections.Generic;
using System.Web;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

public class DB
{
	public DB()
	{
	}

    public int RunSQL(string inSQL)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
        SqlCommand sqlCmd = new SqlCommand(inSQL, conn);

        try
        {
            conn.Open();
            sqlCmd.CommandTimeout = 600;
            sqlCmd.ExecuteNonQuery();
            return 1;
        }
        catch
        {
            return 0;
        }
        finally
        {
            sqlCmd.Dispose();
            conn.Close();
            conn.Dispose();
        }
    }
    
    public DataTable GetDt(string inSQL)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
        SqlDataAdapter sqlDA = new SqlDataAdapter(inSQL, conn);
        DataTable outDt = new DataTable();

        conn.Open();
        sqlDA.SelectCommand.CommandTimeout = 600;
        sqlDA.Fill(outDt);

        sqlDA.Dispose();
        conn.Close();
        conn.Dispose();

        return outDt;

    }

}
以上是封装好的类库,可以直接声明变量调用方法执行sql语句。上例中数据库链接字符串是放在web.congfig中的,如:


<connectionStrings>
    <add name="ConnString" connectionString="Password=bubufx123;Persist Security Info=True;User ID=sa;Initial Catalog=bubufx;Data Source=.\SQLSERVER2008" />
  </connectionStrings>
a、SQL Server验证模式连接


"Server=服务器名;Database=数据库名称;User ID=用户;User Password=密码;"使用缩写与别名“Server=服务器名;Initial Catalog=数据库名称;Uid=用户;Pwd=密码;”

b、数据库文件完整路径(SQLEXPRESS

“Server=(local)\SQLEXPRESS; AttachDbFilename=D:\\bubufx\\bubufxTech\\App_Data\\bubufx.mdf;User Password=bubufx123”

c、Windows 验证模式连接

“Server=服务器名;Database=数据库名称;Integrated Security=SSPI;Server=(local)\SQLEXPRESS;”

数据库文件完整路径:“Serve=服务器名;AttachDbFilename=数据库文件路径; Integrated Security=true”

3、连接Oracle

一下C#连接Oracle代码,仅供参考

using   System.Data.OracleClient;   
using   System.Data;   

...

  string connString="Data   Source=bubufxServer;user=system;password=bubufx123;";//写连接串   

  OracleConnection   conn=new   OracleConnection(connString);//创建一个新连接 

  try   
  {   
  conn.Open();   
  OracleCommand  comd=conn.CreateCommand();   

  comd.CommandText="select * from bubufxTable";  
  OracleDataReader   odr=comd.ExecuteReader();   

while(odr.Read())                       

  {   

Response.Write(odr.GetOracleString(1).ToString());

  }   
  odr.Close();   
  }   
  catch(Exception   bubufxEX)   
  { 
  Response.Write(bubufxEX.Message);  
  }   
  finally   
  {   
  conn.Close();  
  }   


4、连接MySQL 


using   MySQLDriverCS;     


MySQLConnection   DBConn;   
DBConn   =   new   MySQLConnection(new   
MySQLConnectionString("localhost","mysql","root","",3306).AsString);   

DBConn.Open();     

  MySQLCommand   DBComm;   

  DBComm   =   new   MySQLCommand("select a,b from bubufxTable",DBConn);     
 
  MySQLDataReader   DBReader   =   DBComm.ExecuteReaderEx();     

  try   
  { 

  while   (DBReader.Read())   
  {   
  Console.WriteLine("Host   = 
  {0}   and   User   =   {1}",   DBReader.GetString(0),DBReader.GetString(1));   
  }   
  }   
  finally   
  {   
   DBReader.Close();   
   DBConn.Close();   
  }     

  DBConn.Close(); 
5、连接IBM DB2  


OleDbConnection1.Open();   

OleDbDataAdapter1.Fill(dataSet1,"bubufx");   

DataGrid1.DataBind();   
  OleDbConnection1.Close();   

  
this.OleDbInsertCommand1.CommandText   =   "INSERTsintosADDRESS(NAME,   

EMAIL,   AGE,   ADDRESS)   VALUES   

(’bubufx1’,’bubufx2’,’bubufx3’,’bubufx4’)"; 

  OleDbInsertCommand1.Connection.Open();   


OleDbInsertCommand1.ExecuteNonQuery();   


OleDbInsertCommand1.Connection.Close();   

  6、连接SyBase   


Provider=Sybase.ASEOLEDBProvider.2;Initial   Catalog=数据库名;User   
ID=用户名;Data   Source=数据源;Extended   Properties="";Server   Name=ip地址;Network   
Protocol=Winsock;Server   Port   Address=5000;

 7、连接excel

C#连接excel类似access,只要将相应连接字符串换成连接excel的就可以将excel当作数据库来读取了。

97-2003版本:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件位置;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1
2007版本:
Provider=Microsoft.Ace.OleDb.12.0;Data Source=文件位置;Extended Properties=Excel 12.0;HDR=Yes;IMEX=1

备注:【其他说明】

HDR=Yes/NO 表示是否将首行做标题。

IMEX 表示是否强制转换为文本

特别提示:

Extended Properties=’Excel 8.0;HDR=yes;IMEX=1’
A: HDR ( HeaDer Row )设置
若指定值为Yes,代表 Excel 档中的工作表第一行是栏位名称
若指定值為 No,代表 Excel 档中的工作表第一行就是資料了,沒有栏位名称
B:IMEX ( IMport EXport mode )设置
IMEX 有三种模式,各自引起的读写行为也不同,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
示例参考:


private DataTable getexcelDT(string excelPath)
        {
            FileInfo fi = new FileInfo(excelPath);

            string strCon = @" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + excelPath + ";Extended Properties=Excel 8.0";
            OleDbConnection myConn = new OleDbConnection(strCon);
            string strCom = " SELECT * FROM [" + fi.Name.Replace(".xls", "") + "$] ";
            myConn.Open();
            OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "[" + fi.Name.Replace(".xls", "") + "$]");
            myConn.Close();

            return ds.Tables[0];
        }



C#连接数据库方式,Access,SQL Server,Oracle,MySQL,IBM DB2 ,SyBase,excel等,[bubufx分享asp.net基础]

上一篇:梅花雪js树2.0版本带checkbox获取选中值例子,[asp.net基础]


下一篇:设计模式----状态模式