使用ADO.NET实现数据库统计分析功能 (ado.net 数据库统计)

随着大数据时代的到来,数据分析成为了企业管理必不可少的一环。利用数据库中存储的数据,深入挖掘和分析数据,可以帮助企业发掘商业机会,提高营销效果,优化经营管理。而ADO.NET正是一种常用的.NET框架下对数据库进行操作的技术,本文将介绍如何。

一、ADO.NET简介

ADO.NET是.NET框架中的一部分,是一种用于访问数据库的技术。它包含了多个数据访问类,包括连接(Connection)、操作(Command)、读取(DataReader)等,使开发者可以轻松地连接和管理关系型数据库。

二、使用ADO.NET实现数据库统计分析

1.建立数据库连接

使用ADO.NET时,首先需要建立数据库连接。在.NET中,SqlConnection类用于建立与SQL Server数据库的连接,OleDbConnection类用于建立与Access或Excel数据库的连接等。下面以SqlConnection类为例:

“`csharp

string connectionString = “Data Source=yourSQLServer;Initial Catalog=yourDatabase;Persist Security Info=True;User ID=yourUserName;Password=yourPassword”; //建立连接字符串

SqlConnection conn = new SqlConnection(connectionString); //建立数据库连接

try

{

conn.Open(); //打开连接

//连接成功后,可以进行下一步操作

}

catch (Exception ex)

{

Console.WriteLine(ex.Message); //连接失败后输出错误信息

}

finally

{

conn.Close(); //关闭连接

}

“`

2.执行SQL语句

建立好连接后,就可以执行SQL语句了。使用ADO.NET可以通过两种方式执行SQL语句,一种是使用Command对象,一种是使用DataAdapter对象。

“`csharp

//使用Command执行SQL语句

string sqlCommand = “SELECT * FROM yourTable WHERE yourCondition”;

SqlCommand cmd = new SqlCommand(sqlCommand, conn);

try

{

SqlDataReader reader = cmd.ExecuteReader(); //执行查询操作

//读取查询结果

while (reader.Read())

{

//输出查询结果

Console.WriteLine(reader[“ColumnName”].ToString());

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message); //输出错误信息

}

finally

{

cmd.Connection.Close(); //关闭连接

}

“`

“`csharp

//使用DataAdapter执行SQL语句

string sqlCommand = “SELECT * FROM yourTable WHERE yourCondition”;

SqlDataAdapter da = new SqlDataAdapter(sqlCommand, conn);

DataSet ds = new DataSet(); //建立一个DataSet对象用于存储查询结果

try

{

da.Fill(ds); //将查询结果填充到DataSet对象中

DataTable dt = ds.Tables[0]; //获取之一个DataTable对象

//读取DataTable中的数据

foreach (DataRow row in dt.Rows)

{

//输出查询结果

Console.WriteLine(row[“ColumnName”].ToString());

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message); //输出错误信息

}

finally

{

conn.Close(); //关闭连接

}

“`

3.数据统计分析

使用ADO.NET提供的数据访问类,可以方便地实现数据统计分析。下面以查询每个地区销售额的总和为例,介绍如何使用ADO.NET进行数据分析。

“`csharp

string sqlCommand = “SELECT region, SUM(sales) AS totalSales FROM yourTable GROUP BY region”;

SqlDataAdapter da = new SqlDataAdapter(sqlCommand, connectionString);

DataSet ds = new DataSet(); //建立一个DataSet对象用于存储查询结果

try

{

da.Fill(ds); //将查询结果填充到DataSet对象中

DataTable dt = ds.Tables[0]; //获取之一个DataTable对象

//读取DataTable中的数据

foreach (DataRow row in dt.Rows)

{

//输出统计结果

Console.WriteLine(row[“region”].ToString() + ” : ” + row[“totalSales”].ToString());

}

}

catch (Exception ex)

{

Console.WriteLine(ex.Message); //输出错误信息

}

finally

{

conn.Close(); //关闭连接

}

“`

以上代码中的SQL语句使用了SUM()函数和GROUP BY子句,可以统计每个地区销售额的总和。使用ADO.NET提供的DataAdapter类可以将查询结果填充到DataSet对象中,通过读取DataSet中的数据可以方便地进行数据分析。

三、

本文介绍了如何。通过建立数据库连接、执行SQL语句和数据统计分析三个步骤,可以方便地对数据库中的数据进行深入挖掘和分析,为企业在商业决策和管理中提供重要的参考依据。

相关问题拓展阅读:

ado.net快速上手实践篇(二)

五、dal层数据访问实现

在这里我们使用前一篇文章里实现的数据持久化层和伪SqlMapper对象,实现数据操作。下面我们来看看Dal下缺友核心的Dao如何实现:

还记得我们在下面的dao类是怎么实现的吗?没错,我们前陆根据一个基类BaseDAO和它的构造函数,实现dao的配置加载。但是楼猪的实现没有那么复杂和强大,本文的实现其实就是通过BaseDAO和构造函数获取数据库连接对象的key,初始化一个SqlMapper,然后利用SqlMapper对象进行基本的CRUD等等数据操作。那么我们如何利用BaseDAO和构造函数就像以慧扮顷前在系列文章里的提到的Dal层下那样进行SqlMapper的初始化呢?

1、在AdoNetDataaccess.Mapper下我们定义公共的BaseDAO类

代码

namespace AdoNetDataAccess.Mapper

{

public abstract class BaseDAO

{

#region PRoperties

public SqlMapper SqlMapper { get; set; }

#endregion

#region Constructor

private BaseDAO()

{

}

/// summary

/// SqlMapper属性适用

/// /summary

/// param name=”mapperName”/param

public BaseDAO(string mapperName)

{

this.SqlMapper = MapperUtill.GetMapper(mapperName);

}

#endregion

}

}

2、初始化SqlMapper的实用类

代码

using System;

using System.Collections.Generic;

using System.Configuration;

namespace AdoNetDataAccess.Mapper

{

using AdoNetDataAccess.Core.Contract;

using AdoNetDataAccess.Core.Implement;

public sealed class MapperUtill

{

#region fields

public static string currentSqlKey = “sqlConn”;

public static int cmdTimeOut = 15;

private static readonly object objSync = new object();

private static readonly IDictionarystring, SqlMapper dictMappers = new Dictionarystring, SqlMapper();

#endregion

#region constructor and methods

private MapperUtill()

{

}

static MapperUtill()

{

try

{

cmdTimeOut = int.Parse(ConfigurationManager.AppSettings);

}

catch

{

cmdTimeOut = 15;

}

//实例化SqlDbMapper

for (int i = 0; i

ConfigurationManager.ConnectionStrings.Count; i++)

{

string key = ConfigurationManager.ConnectionStrings.Name;

string value = ConfigurationManager.ConnectionStrings.ConnectionString;

CreateMapper(key, value, cmdTimeOut);

}

}

public static SqlMapper GetSqlMapper(string key)

{

return MapperUtill.GetMapper(key);

}

public static SqlMapper GetCurrentSqlMapper()

{

return MapperUtill.GetMapper(currentSqlKey);

}

public static void CreateMapper(string connKey, string sqlConStr, int connTimeOut)

{

IDbOperation operation = new SqlServer(sqlConStr, connTimeOut);

SqlMapper mapper = new SqlMapper(operation);

dictMappers.Add(connKey.ToUpper().Trim(), mapper);//不区分大小写

}

public static SqlMapper GetMapper(string sqlConKey)

{

if (string.IsNullOrEmpty(sqlConKey))

{

throw new Exception(“数据库连接字符串主键为空!”);

}

sqlConKey = sqlConKey.ToUpper();//不区分大小写

SqlMapper mapper = null;

if (dictMappers.ContainsKey(sqlConKey))

{

mapper = dictMappers;

}

else

{

throw new Exception(string.Format(“没有{0}所对应的数据库连接”, sqlConKey));

}

return mapper;

}

/// summary

/// 释放所有

/// /summary

public void Release()

{

foreach (KeyValuePairstring, SqlMapper kv in dictMappers)

{

SqlMapper mapper = kv.Value;

if (mapper == null)

{

continue;

}

mapper.CurrentDbOperation.CloseConnection();

}

dictMappers.Clear();

}

#endregion

}

}

这个实用类的重要作用就是初始化配置文件里connectionStrings配置节点,以获取sql连接对象必须的连接字符串。

3、PersonDao类

下面就是针对具体的Person表的数据操作了:

代码

using System.Collections.Generic;

using System.Data;

namespace AdoNetDataAccess.Dal.Dao

{

using AdoNetDataAccess.Dal.Model;

using AdoNetDataAccess.Dal.Utility;

using AdoNetDataAccess.Mapper;

public class PersonDao : BaseDAO

{

public PersonDao()

{

}

public int Insert(string sqlInsert)

{

int id = this.SqlMapper.Insert(sqlInsert);

//object obj = this.SqlMapper.ExecuteScalar(sqlInsert, System.Data.CommandType.Text, null);

return id;

}

public bool BatchInsert(IListPerson listModels)

{

int batchSize = 50000;

int copyTimeOut = 60;

DataTable dt = DataTableHelper.CreateTablePerson(listModels);

bool flag = this.SqlMapper.BatchInsert(typeof(Person).Name, batchSize, copyTimeOut, dt);

return flag;

}

public int Update(string sqlUpdate)

{

int result = this.SqlMapper.Update(sqlUpdate);

return result;

}

public IListPerson SelectPersons(string sqlSelect)

{

IListPerson listPersons = this.SqlMapper.QueryForListPerson(sqlSelect);

return listPersons;

}

public IDictionaryint, Person SelectDictPersons(string sqlSelect)

{

IDictionaryint, Person dictPersons = this.SqlMapper.QueryForDictionaryint, Person(“Id”, sqlSelect);

return dictPersons;

}

public DataTable SelectPersonTable(string sqlSelect)

{

DataTable dt = this.SqlMapper.FillDataTable(sqlSelect, CommandType.Text, null);

return dt;

}

public DataSet SelectPersonDataSet(string sqlSelect)

{

DataSet ds = this.SqlMapper.FillDataSet(sqlSelect, CommandType.Text, null);

return ds;

}

public int Delete(string sqlDelete)

{

int result = this.SqlMapper.Delete(sqlDelete);

return result;

}

}

}

到这里,一个dao类操作就实现了。然后我们按步就班实现对外调用的服务接口。在表现层调用吧。

六、表现层的调用

1、配置文件

代码

appSettings

add key=”db_timeOut” value=”5000″/

/appSettings

connectionStrings

add name=”sqlConn” connectionString=”Data Source=.sqlexpress; Initial Catalog=TestDb; User Id=sa; PassWord=123456;”/

add name=”sqlConnStr1″ connectionString=”Data Source=.sqlexpress; Initial Catalog=TestDb; User Id=sa; Password=123456;”/

add name=”sqlConnStr2″ connectionString=”Data Source=.sqlexpress; Initial Catalog=TestDb; User Id=sa; Password=123456;”/

/connectionStrings

其中,connectionString是必须的,如果没有,我们无法加载调用可用的SqlMapper。

2、CRUD操作测试

代码

using System;

using System.Collections;

using System.Collections.Generic;

using System.Data;

namespace OOXXWebApp

{

using AdoNetDataAccess.Dal;

using AdoNetDataAccess.Dal.Model;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

//增删改查测试

string sqlInsert = “INSERT Person (FirstName,LastName,Weight,Height) VALUES( ‘jeff’,’wong’,70,180) SELECT @@IDENTITY FROM Person(NOLOCK)”;

string sqlUpdate = “UPDATE Person SET Height=178 WHERE Id=1”;

string sqlSelect = “SELECT TOP 100 * FROM Person(NOLOCK)”;

string sqlDelete = “DELETE Person WHERE Id10 AND Id100”;

IListPerson listModels = new ListPerson();

for (int i = 0; i

500000; i++)

{

Person model = new Person();

model.FirstName = “Jeff”;

model.LastName = “Wong”;

model.Weight = 70;

model.Height = 180;

listModels.Add(model);

}

Response.Write(“Test Beginning……br/”);

int id = ServiceFactory.CreatePersonService().Add(sqlInsert);

Response.Write(string.Format(“br/Insert and return id:{0}”, id));

bool flag = ServiceFactory.CreatePersonService().BatchInsert(listModels);

Response.Write(string.Format(“br/ Batch Insert {0}”, flag ? “succeed” : “failed”));

IListPerson listPersons = ServiceFactory.CreatePersonService().GetPersons(sqlSelect);

Response.Write(string.Format(“br/Select pesons and return persons:{0}”, listPersons.Count));

IDictionaryint, Person dictPersons = ServiceFactory.CreatePersonService().GetDictPersons(sqlSelect);

Response.Write(string.Format(“br/Select pesons and return dictionary persons:{0}”, dictPersons.Count));

DataTable dt = ServiceFactory.CreatePersonService().GetPersonTable(sqlSelect);

Response.Write(string.Format(“br/Select pesons and return persons:{0}”, dt.Rows.Count));

DataSet ds = ServiceFactory.CreatePersonService().GetPersonDataSet(sqlSelect);

Response.Write(string.Format(“br/Select pesons and return persons:{0}”, ds.Tables.Rows.Count));

int affectNum = ServiceFactory.CreatePersonService().Modify(sqlUpdate);

Response.Write(string.Format(“br/Update and affect rows :{0}”, affectNum));

affectNum = 0;

affectNum = ServiceFactory.CreatePersonService().Remove(sqlDelete);

Response.Write(string.Format(“br/Delete and affect rows :{0}”, affectNum));

Response.Write(“br/br/Test End.”);

}

}

}

}

这个就不用多说了吧,表现层写SQL语句调用写好的服务就行了。比较不舒服的地方就是SQL语句不得不写在类里面,如果自动生成或者独立放在xml下实现可配置的形式那就更好了,当然sql语句不是我们讨论的重点,您有好的方法可以自己扩展实现更人性化的功能,减少书写SQLl语句的工作。

七、最后,对demo工程文件结构进行简单说明。

1、数据持久化层AdoNetDataAccess.Core

2、SqlMapper层AdoNetDataAccess.Mapper(引用AdoNetDataAccess.Core)

3、具体数据操作使用层AdoNetDataAccess.Dal(引用AdoNetDataAccess.Mapper)

ado.net 数据库统计的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ado.net 数据库统计,使用ADO.NET实现数据库统计分析功能,ado.net快速上手实践篇(二)的信息别忘了在本站进行查找喔。


数据运维技术 » 使用ADO.NET实现数据库统计分析功能 (ado.net 数据库统计)