数据库操作类 数据库有哪些类型
很多朋友对于数据库操作类和数据库有哪些类型不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
C#中如何定义数据库操作类,并调用
以下是我编写的一个操作access数据库的类,其他数据库可以参考修改,原理差不多的。希望对你有帮助。
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Configuration;
using System.Data;
namespace AutoEmailSender
{
///<summary>
///数据库交互类
///</summary>
public class DB
{
///<summary>
///获得数据库连接
///</summary>
///<returns></returns>
public static OleDbConnection GetDBConnection()
{
return new OleDbConnection(ConfigurationManager.AppSettings["ConnectString"]);
}
///<summary>
///查询结果集
///</summary>
///<param name="sql">执行语句</param>
///<returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(string sql)
{
using(OleDbConnection con= GetDBConnection())
{
OleDbCommand cmd= new OleDbCommand(sql, con);
return ExecuteDataTable(cmd);
}
}
///<summary>
///查询结果集
///</summary>
///<param name="cmd">执行语句的OleDbCommand命令</param>
///<returns>返回一个DataTable对象</returns>
public static DataTable ExecuteDataTable(OleDbCommand cmd)
{
DataSet ds= new DataSet();
using(OleDbDataAdapter da= new OleDbDataAdapter(cmd))
{
try
{
da.Fill(ds);
}
catch(Exception e)
{
throw e;
}
}
if(ds.Tables.Count> 0)
{
ds.Tables[0].DefaultView.RowStateFilter= DataViewRowState.Unchanged| DataViewRowState.Added| DataViewRowState.ModifiedCurrent| DataViewRowState.Deleted;
return ds.Tables[0];
}
else
return null;
}
///<summary>
///执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
///</summary>
///<param name="sql">查询语句</param>
///<returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(string sql)
{
using(OleDbConnection con= GetDBConnection())
{
OleDbCommand cmd= new OleDbCommand(sql, con);
return ExecuteScalar(cmd);
}
}
///<summary>
///执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
///</summary>
///<param name="cmd">查询命令</param>
///<returns>返回结果集中第一行的第一列的object值</returns>
public static object ExecuteScalar(OleDbCommand cmd)
{
try
{
cmd.Connection.Open();
object obj= cmd.ExecuteScalar();
cmd.Connection.Close();
return obj;
}
catch(Exception error)
{
cmd.Connection.Close();
throw error;
}
}
///<summary>
///更新数据集
///</summary>
///<param name="dt">要更新的数据集</param>
///<param name="insertCmd">插入SQL语句</param>
///<param name="updateCmd">更新SQL语句</param>
///<param name="deleteCmd">删除SQL语句</param>
///<returns></returns>
public static int UpdateDataSet(DataTable dt, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
using(OleDbDataAdapter da= new OleDbDataAdapter())
{
da.InsertCommand= insertCmd;
da.UpdateCommand= updateCmd;
da.DeleteCommand= deleteCmd;
//da.UpdateBatchSize= 0;//UpdateBatchSize:指定可在一次批处理中执行的命令的数量,在Access不被支持。0:批大小没有限制。1:禁用批量更新。>1:更改是使用 UpdateBatchSize操作的批处理一次性发送的。
da.InsertCommand.UpdatedRowSource= UpdateRowSource.None;
da.UpdateCommand.UpdatedRowSource= UpdateRowSource.None;
da.DeleteCommand.UpdatedRowSource= UpdateRowSource.None;
try
{
int row= da.Update(dt);
return row;
}
catch(Exception e)
{
throw e;
}
}
}
///<summary>
///返回一个查询语句执行结果的表结构
///</summary>
///<param name="sql">查询语句,不支持复杂SQL</param>
///<returns></returns>
public static DataTable GetTableSchema(string sql)
{
sql= sql.ToUpper();
DataTable dt= null;
using(OleDbConnection con= GetDBConnection())
{
OleDbCommand cmd= new OleDbCommand(sql, con);
con.Open();
using(OleDbDataReader dr= cmd.ExecuteReader(CommandBehavior.KeyInfo| CommandBehavior.SchemaOnly| CommandBehavior.CloseConnection))
{
dt= dr.GetSchemaTable();
}
}
return dt;
}
///<summary>
///根据输入的查询语句自动生成插入,更新,删除命令
///</summary>
///<param name="sql">查询语句</param>
///<param name="insertCmd">插入命令</param>
///<param name="updateCmd">更新命令</param>
///<param name="deleteCmd">删除命令</param>
public static void GenerateUpdateSQL(string sql, OleDbCommand insertCmd, OleDbCommand updateCmd, OleDbCommand deleteCmd)
{
sql= sql.ToUpper();
DataTable dt= GetTableSchema(sql);
string tableName= dt.Rows[0]["BaseTableName"].ToString();
List<OleDbParameter> updatePrimarykeys= new List<OleDbParameter>();//主键参数集合
List<OleDbParameter> deletePrimarykeys= new List<OleDbParameter>();//主键参数集合,因为不能同时被OleDbCommand个命令引用,所以多申明一个
List<OleDbParameter> insertFields= new List<OleDbParameter>();//字段参数集合
List<OleDbParameter> updateFields= new List<OleDbParameter>();//字段参数集合
string columns= string.Empty, values="", set="", where="";
foreach(DataRow dr in dt.Rows)
{
if(dr["IsAutoIncrement"].ToString().Equals("False"))
{
insertFields.Add(new OleDbParameter("@"+ dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));
updateFields.Add(new OleDbParameter("@"+ dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
dr["BaseColumnName"].ToString()));
if(!string.IsNullOrEmpty(columns))
columns+=",";
columns+= dr["BaseColumnName"].ToString();
if(!string.IsNullOrEmpty(values))
values+=",";
values+="@"+ dr["BaseColumnName"].ToString();
if(!string.IsNullOrEmpty(set))
set+=",";
set+= dr["BaseColumnName"].ToString()+"=@"+ dr["BaseColumnName"].ToString();
}
if(dr["IsKey"].ToString().Equals("True"))
{
updatePrimarykeys.Add(new OleDbParameter("@OLD_"+ dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
deletePrimarykeys.Add(new OleDbParameter("@OLD_"+ dr["BaseColumnName"].ToString(),
(OleDbType)dr["ProviderType"],
Convert.ToInt32(dr["ColumnSize"]),
ParameterDirection.Input,
Convert.ToBoolean(dr["AllowDBNull"]),
Convert.ToByte(dr["NumericScale"]),
Convert.ToByte(dr["NumericPrecision"]),
dr["BaseColumnName"].ToString(), DataRowVersion.Original, null));
if(!string.IsNullOrEmpty(where))
where+=" and";
where+= dr["BaseColumnName"].ToString()+"=@OLD_"+ dr["BaseColumnName"].ToString();
}
}
insertCmd.CommandText= string.Format("insert into{0}({1}) values({2})", tableName, columns, values);
updateCmd.CommandText= string.Format("update{0} set{1} where{2}", tableName, set, where);
deleteCmd.CommandText= string.Format("delete from{0} where{1}", tableName, where);
insertCmd.Connection= GetDBConnection();
updateCmd.Connection= GetDBConnection();
deleteCmd.Connection= GetDBConnection();
foreach(OleDbParameter pa in insertFields)
{
insertCmd.Parameters.Add(pa);
}
foreach(OleDbParameter pa in updateFields)
{
updateCmd.Parameters.Add(pa);
}
foreach(OleDbParameter pa in updatePrimarykeys)
{
updateCmd.Parameters.Add(pa);
}
foreach(OleDbParameter pa in deletePrimarykeys)
{
deleteCmd.Parameters.Add(pa);
}
}
}
}
数据库有哪些类型
数据库有两种类型,分别是关系型数据库与非关系型数据库。
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
关系型数据库主要有:
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等等。
非关系型数据库主要有:
NoSql、Cloudant、MongoDb、redis、HBase等等。
扩展资料:
非关系型数据库的优势:
1、性能高:NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2、可扩展性好:同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
关系型数据库的优势:
1、可以复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2、事务支持良好:使得对于安全性能很高的数据访问要求得以实现。
参考资料来源:百度百科-数据库
请问数据库有哪些种类呢
数据库通常分为:
层次式数据库、网络式数据库和关系式数据库三种。
而不同的数据库是按不同的数据结构来联系和组织的。
数据库有类型之分,是根据数据模型划分的。目前成熟地应用在数据库系统中的数据模型有:层次模型、网壮模型和关系模型。
一、层次模型:
层次模型是用树结构表示记录类型及其联系的。
树结构的基本特点是:
1、有且仅有一个结点无父结点;
2、其它结点有且有一个父结点。
在层次模型中,树的结点是记录型。上一层记录型和下一层记录型的联系是1:n的。
层次模型就象下面我们给出的一棵倒立的树。
注意:在层次式数据库中查找记录,必须指定存取路径。这种关系模型不支持m:n联系。
二、网状模型:
网状模型中结点间的联系不受层次限制,可以任意发生联系,所以她的结构是结点的连通图。
网状模型结构的特点是:
1、有一个以上结点无父结点;
2、至少有一个结点有多于一个父结点。
注意:虽然网状模型能反映各种复杂的关系,但网状模型在具体实现上,只支持1:n联系,对
于m:n联系可将其转化为1:n联系。
三、关系模型:
关系模型的本质就是用若干个二维表来表示实体及其联系。
关系是通过关系名和属性名定义的。一个关系可形式化表示为:
R(A1,A2,A3,…,Ai,…)
其中:R为关系名,Ai为关系的属性名。
目前常用的数据库管理系统有:
ACCESS、SQL Server、 Oracle、MySQL、FoxPro和Sybase等。
ACCESS是美国Microsoft公司于1994年推出的微机数据库管理系统.它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面数据库管理系统。
Oracle公司是全球最大的信息管理软件及服务供应商,成立于1977年,总部位于美国加州 Redwood shore。Oracle提供的完整的电子商务产品和服务包括:用于建立和交付基于Web的Internet平台;综合、全面的具有Internet能力的商业应用;强大的专业服务,帮助用户实施电子商务战略,以及设计、定制和实施各种电子商务解决方案...
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的是关系型数据库管理系统。
内容来源网络,仅供参考!
如果你还想了解更多这方面的信息,记得收藏关注本站。