sqlserver 存储过程 C#调用 实现从数据库Get数据
在最近的项目中我想建立一个EFDBfirst的模型但是失败了,生成的edmx中没有实体类和表结构,到处需求解决方案,未果。
问题请见:https://q.cnblogs.com/q/102743/
后来使用本文写的这个方法
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.在sqlserver中建立存储过程
在一个database中展开Programmability,展开Stored Procedures,右击New一个Stroed Procedure

在Query中会出现如下Code:
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>//下面要添加名字
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here//添加参数
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; -- Insert statements for procedure here//添加sql语句
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO
根据提示添加所需参数和sql语句,在上面代码中已经用中文标注位置
给个小demo:
添加如下代码(由于项目原因隐掉了数据库名和表名,见谅)
USE [xxx]
GO
/****** Object: StoredProcedure [dbo].[GetPluralProject] Script Date: 1/5/2018 1:39:18 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[GetPluralProject]--这边是名字
-- Add the parameters for the stored procedure here//参数
@Language nvarchar(20)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; -- Insert statements for procedure here//sql语句
SELECT distinct trans.[ProjectName] as ProjectName
FROM [xxx].[dbo].[xxx] trans
Where trans.string like '%plural,%'
END
然后运行一下就好了,在刚才打开的目录下会出现你建好的存储过程
在当前数据库下新建一个Query(也可以use当前数据库,不然找不到,因为这个存储过程毕竟是存在当前数据库下的),sql语句如下:
exec GetPluralProject ''
运行,结果就出来了

2.现在要用C#代码来调用这个存储过程,并给它传参数
我这边有个写好的DbHelper.cs文件,这是需要用到的,下载路径:https://pan.baidu.com/s/1bpLfw7t
在Models中添加这个文件

以下是该文件片段(咱们需要用到的,不需要修改什么,贴出来看看)
/// <summary>
/// Executes the stored procedure, and return DataTable
/// </summary>
/// <param name="paraValues"></param>
/// <returns></returns>
///
public DataTable ExecuteDataTable(string ProName, params object[] paraValues)//存储过程名字,参数
{
SqlCommand cmd = CreateSqlCommand(ProName);
try
{
this.DeriveParameters(cmd);
this.AssignParameterValues(cmd, paraValues);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
return dataTable;
}
catch
{
throw;
}
}
好我们来调用这个函数,我是在webapi中用到的,所以写在controller中,可以看上一篇博客
代码如下:
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using xxxService.Models; namespace xxxService.Controllers
{
public class ProjectsController : ApiController
{
[CrossSite]
public DataTable Get()
{ DbHelper DBH = new DbHelper();
DataTable result = DBH.ExecuteDataTable("GetPluralProject", "");
return result; }
}
}
这里没有写到怎么定义参数补充下:
object[] Params = new object[];
Params[] = ProjectName;
Params[] = CultureName; DbHelper DBH = new DbHelper();
DataTable result = DBH.ExecuteDataTable("xxx", Params);
return result;
调用到这个函数后就得到了数据

我是用ajax调用api以json的形式返回的这个数据,用jquery处理的,还挺方便的
在C#中怎么处理还没怎么研究,但是应该不难,数据在Rows下面Results View里面

sqlserver 存储过程 C#调用 实现从数据库Get数据的更多相关文章
- mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
摘要: 下文讲述清空数据库中所有表信息的方法分享,如下所示: 实验环境:sql server 2008 实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启 ...
- sqlserver存储过程中调用存储过程
declare @value1 varchar(100)declare @value2 int exec xx.dbo.xxxxx 'param1', 'param2', 'param3', @val ...
- 在SqlServer查询分析器里 访问远程数据库 进行数据查询更新等操作(openrowset)
启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_config ...
- SQLSERVER 触发器 将一个服务器上的数据库中数据插入到另一个服务器上的数据库中怎么做
首先要执行 sp_addlinkedserver '服务器ip' 然后开始写语句 insert into ip.库名字.dbo.table select * from iserted
- [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器
本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...
- 创建并在项目中调用SQLSERVER存储过程的简单示例
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...
- 存储过程系列之存储过程具体操作过程及sql数据库调用
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. 存 ...
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...
- sqlserver存储过程里传字段、传字符串,并返回DataTable、字符串,存储过程调用存储过程。
经常需要查一些信息, 想写视图来返回数据以提高效率,但是用试视图不能传参,只好想到改存储过程.记录一下语法,方便以后做项目时候想不起来了用. 1:传字段返回datatable 2: 传字段回一串字符 ...
随机推荐
- 【Unity】鼠标指向某物体,在其上显示物体的名字等等等等信息
之前一直用NGUI HUD Text插件做这个功能,感觉一个小功能就导一个插件进来简直丧心病狂.然后就自己写了一个~ Camera cam;//用于发射射线的相机 Camera UIcam;//UI层 ...
- 命令打开java控制面板
运行一些java程序时,会提示java安全阻止,需要手动运行,java7一起更改安全级别为“中”就可以了,java8需要配置信任网站 . 这些操作都需要在java控制面板进行,经常会出现无法在控制面板 ...
- vue ref父子组件传值
一. ref使用在父组件上 父组件html: <information ref='information'></information> import information ...
- GNS3 模拟icmp重定向
网关实质上是一个网络通向其他网络的IP地址.比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0:网络B的IP地址 ...
- ThinkPhp3.2.3缓存漏洞复现以及修复建议
小编作为一个php(拍黄片)的程序员,今天早上无意间看到thinkphp的缓存漏洞,小编在实际开发过程中用thinkphp3.2.3挺多的. 我们这里来复现一下漏洞 后面我会提出修复建议 首先我们下载 ...
- [U53204] 树上背包的优化
题目链接 本文旨在介绍树上背包的优化. 可见例题,例题中N,M∈[1,100000]N,M \in [1,100000]N,M∈[1,100000]的数据量让O(nm2)O(nm^2)O(nm2)的朴 ...
- 剑指offer,双指针法,vector输出不完美
原因:由于在第一个res push_back给allRes的时候allRes的列已经确定,所以在输出的时候会输出一些多余的东西,在输出的时候不好处理 #include <iostream> ...
- django ajax发送post请求
第一种:将csrf_token放在from表单里 <script> function add_competion_goods() { $.ajax({ url: "{% url ...
- Codeforces Forethought Future Cup Elimination Round 选做
1146C Tree Diameter 题意 交互题.有一棵 \(n(n\le 100)\) 个点的树,你可以进行不超过 \(9\) 次询问,每次询问两个点集中两个不在同一点集的点的最大距离.求树的直 ...
- centos搭建gitlib
sudo yum install -y curl policycoreutils-python openssh-server sudo yum -y install postfixsudo syste ...