asp.net core连接sqlserver
开发环境:win7,vs2017,sqlserver2014
vs上建立一个asp.net core web项目和一个.net core的类库项目DBA
简单起见,在DBA项目中就一个类SqlServerManager:
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection; namespace DBA
{
public class SqlServerManager : DbContext
{
private IDbConnection connection = null;
private SqlCommand command = null;
public SqlServerManager(DbContextOptions<SqlServerManager> options) : base(options) {
if(null== connection)
connection = Database.GetDbConnection();//这个GetDbConnection需要在NuGet中添加Microsoft.AspNetCore.App if (connection.State == ConnectionState.Closed)
connection.Open();
if (command == null)
command=connection.CreateCommand() as SqlCommand; } public int Insert<T>(T table)
{
try {
command.CommandText = GetInsertSqlStr(table, command.Parameters);
return command.ExecuteNonQuery();}
catch(Exception ex)
{
throw ex;
}
}
public void ExecSqlStr(string sql,Dictionary<string,object> Parameters)
{
command.CommandText = sql;
foreach(var str in Parameters.Keys)
{
var value = Parameters.GetValueOrDefault(str);
command.Parameters.Add(
new SqlParameter()
{
ParameterName="@"+str,
Value= value,
DbType= GetDbType(value.GetType())
}
);
}
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
DataSet myDataSet = new DataSet();
da.Fill(myDataSet);
DataTable db = myDataSet.Tables[];
} private string GetInsertSqlStr<T>(T table,SqlParameterCollection sqlParameters)
{
string strSql = "insert into "+ typeof(T).Name + " (";
//获得泛型类型的公共属性
var pros = typeof(T).GetProperties().Where(pi => !Attribute.IsDefined(pi, typeof(NotMappedAttribute))).ToArray();
string values = "";
foreach (PropertyInfo p in pros)
{
strSql += p.Name + ",";
values += "@" + p.Name + ","; sqlParameters.Add(new SqlParameter() {
ParameterName = "@" + p.Name,
Value = p.GetValue(table),
DbType = GetDbType(p.PropertyType)
});
}
values = values.Substring(, values.Length - );
strSql = strSql.Substring(, strSql.Length - ) + ") values ("+ values+")";
return strSql;
} private DbType GetDbType(Type t)
{
switch (Type.GetTypeCode(t))
{
case TypeCode.Boolean:
return DbType.Boolean;
case TypeCode.Byte:
return DbType.Byte;
case TypeCode.DateTime:
return DbType.DateTime;
case TypeCode.Decimal:
return DbType.Decimal;
case TypeCode.Double:
return DbType.Double;
case TypeCode.Int16:
return DbType.Int16;
case TypeCode.Int32:
return DbType.Int32;
case TypeCode.Int64:
return DbType.Int64;
case TypeCode.String:
return DbType.String;
default:
return DbType.Object;
}
}
}
}
本文的重点不在于DBA项目中如何去访问数据库,这里可以用EF,也可以用ADO.NET等等,我这里用的是ADO.NET
重点在于如何在web项目中去调用DBA项目来实现数据库的访问
首先肯定是要添加DBA项目的引用。
然后在web项目的Startup类的ConfigureServices函数中添加代码:

注意这里的数据库连接字符串,里面没有用户名和密码,就这样就可以了
然后在控制器中通过构造函数来获取SqlServerManager的对象

好了,这样就可以访问数据库了,只是一个简单的例子,看看就好
asp.net core连接sqlserver的更多相关文章
- Asp.Net Core 连接Mysql
上一篇文章里最后在VS里测试是没有问题的,但是在Windows命令行模式下会报错. 首先用dotnet restore命令的时候会出现error: 然后用dotnet run会出现警告,但是依旧会成功 ...
- ASP.net分别连接SQLserver数据库与连接Access数据库精英版
-------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...
- ASP.NET Core 连接 GitLab 与 MatterMost 打造 devops 工具
在现代化开发工具链里面就包含了自动化的通讯工具,而日志写代码我是推到 Gitlab 平台上,我今天听了郭锐大佬的分享之后,感觉我现在的团队的自动化做的远远不够.我在他的课程上学到的最重要一句话就是做工 ...
- 处理asp.net core连接mysql的一个异常Sequence contains more than one matching element
晚上在那里调程序,把mysql.data组件的nuget包进行了更新,前几天好好的程序,开始抛错,跟踪断点发现以下的异常: Unable to connect to any of the specif ...
- asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)
一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...
- asp.net 连接sqlserver数据库
在asp.net中连接sqlserver数据库之前,首先得确保正常安装了sqlserver2008,同时有数据库. 在项目中添加一个类DB,用来专门负责执行对数据库的增删改查.在添加的过程中会弹出下面 ...
- ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core 程序启动过程如下 目录 Startup 类 Configure() 方法 中间件 使用中间件 Configure 方法 的参数 IApplicationBuilder Ext ...
- Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
前言 在 .Net Core 2.2中 Microsoft.AspNetCore.App 默认内置了EntityFramework Core 包,所以在使用过程中,我们无需再从 NuGet 仓 ...
- 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange
如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...
随机推荐
- Fragment实践之聊天窗体
前几天刚学了android的fragment,总是停留在简单的demo,也许永远都学不会. 今天,我要动手向我的聊天软件开刀.今天.用Fragment来实现一个例如以下图效果的聊天界面. waterm ...
- 项目中遇到的HQL查询问题
问题描写叙述: 目的:想要查询出全部最新版本号的组件 说明:组件:版本号 =1:n关系 ,假设这个组件仅仅有一个版本号也要可以查出来. 项目中使用的是内存数据库,无法看到表结构,这里的样例仅仅用于模拟 ...
- 【机器学习具体解释】SVM解二分类,多分类,及后验概率输出
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN−勿在浮沙筑高台 支持向量机(Support Vecto ...
- 关键路径(AOE)---《数据结构》严蔚敏
// exam1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include &l ...
- iOS xmpp的使用
#import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...
- android 不同进程间的调用 AIDL 实现通讯服务
android 不同进程间的调用 AIDL 实现通讯服务 近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好 ...
- C和Fortran互相传递动态数组
C和Fortran的相互调用传递数值的方法有很多,但是F03标准的出笼,使用ISO_C_BINDING进行C和Fortran的互相调用有着更显著的优势: 1.与编译器和平台无关: 2.Fortran中 ...
- C# MVC 枚举转 SelectListItem
<span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif; background-color: r ...
- mysql字段去重方式
一直找不出某个字段去重的前提下,还能够显示其它字段的数据 以下是解决方法: SELECT *, COUNT(DISTINCT( province)) FROM area_info WHERE type ...
- 移动端和PC端有什么区别
1.PC考虑的是浏览器的兼容性,而移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器使用的都是webkit内核,所以说做移动端开发,更多考虑的应该是手机分辨 ...