sqlrowset 转化为json_将SQL Server表数据,转换为JSON格式

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE[dbo].[SerializeJSON](

@ParameterSQL AS VARCHAR(MAX)

)

AS

BEGIN

DECLARE @SQL NVARCHAR(MAX)

DECLARE @XMLString VARCHAR(MAX)

DECLARE @XML XML

DECLARE @Paramlist NVARCHAR(1000)

SET @Paramlist= N'@XML XML OUTPUT'SET @SQL= 'WITH PrepareTable (XMLString)'SET @SQL= @SQL + 'AS('SET @SQL= @SQL + @ParameterSQL+ 'FOR XML RAW,TYPE,ELEMENTS'SET @SQL= @SQL + ')'SET @SQL= @SQL + 'SELECT @XML=[XMLString]FROM[PrepareTable]'EXEC sp_executesql @SQL, @Paramlist, @XML=@XML OUTPUT

SET @XMLString=CAST(@XML AS VARCHAR(MAX))

DECLARE @JSON VARCHAR(MAX)

DECLARE @Row VARCHAR(MAX)

DECLARE @RowStart INT

DECLARE @RowEnd INT

DECLARE @FieldStart INT

DECLARE @FieldEnd INT

DECLARE @KEY VARCHAR(MAX)

DECLARE @Value VARCHAR(MAX)

DECLARE @StartRoot VARCHAR(100);SET @StartRoot=''DECLARE @EndRoot VARCHAR(100);SET @EndRoot=''DECLARE @StartField VARCHAR(100);SET @StartField=''SET @RowStart=CharIndex(@StartRoot,@XMLString,0)

SET @JSON=''WHILE @RowStart>0BEGIN

SET @RowStart=@RowStart+Len(@StartRoot)

SET @RowEnd=CharIndex(@EndRoot,@XMLString,@RowStart)

SET @Row=SubString(@XMLString,@RowStart,@RowEnd-@RowStart)

SET @JSON=@JSON+'{'

-- foreach row

SET @FieldStart=CharIndex(@StartField,@Row,0)

WHILE @FieldStart>0BEGIN--parse node key

SET @FieldStart=@FieldStart+Len(@StartField)

SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)

SET @KEY=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)

SET @JSON=@JSON+'"'+@KEY+'":'

--parse node value

SET @FieldStart=@FieldEnd+1SET @FieldEnd=CharIndex('',@Row,@FieldStart)

SET @Value=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)

SET @JSON=@JSON+'"'+@Value+'",'SET @FieldStart=@FieldStart+Len(@StartField)

SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)

SET @FieldStart=CharIndex(@StartField,@Row,@FieldEnd)

END

IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))

SET @JSON=@JSON+'},'

--/ foreach row

SET @RowStart=CharIndex(@StartRoot,@XMLString,@RowEnd)

END

IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))

SET @JSON='['+@JSON+']'SELECT @JSON

END

GO

在C++中连接SQL Server数据库通常需要使用ODBC(Open Database Connectivity)或者ADO(ActiveX Data Objects)这样的API,因为它们提供了一种平台无关的方式来访问各种类型的数据库,包括SQL Server。以下是基本步骤: 1. **安装驱动**: 首先,确保已经安装了Microsoft的ODBC驱动(对于Windows系统),或者SQL Server的对应C++驱动。 2. **包含头文件**: 使用C++时,可以添加相应的头文件,如`#include <sql.h>`,`#include <windows.h>` (仅限于Windows) 或 `#include <odbc32.h>`。 3. **创建环境和连接**: 创建一个ODBC环境,并使用它来建立到数据库的连接。例如: ```cpp SQLHENV env; SQLHDBC dbc; SQLRETURN ret; ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); // 初始化环境... ret = SQLConnect(env, (SQLCHAR*)"mydsn", SQL_NTS, (SQLCHAR*)"username", SQL_NTS, (SQLCHAR*)"password", SQL_NTS); ``` 这里"mydsn"是数据源名称,替换为实际的数据库DSN。 4. **执行查询**: 创建一个命令句柄(SQLHSTMT)并执行查询: ```cpp SQLHSTMT stmt; ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); SQLSetConnectAttr(stmt, SQL_ATTR_CURSOR_SCROLLABILITY, (SQLPOINTER)SQL.Scrollable, 0); // 设置游标属性 SQLExecDirect(stmt, (SQLCHAR*) "SELECT * FROM table", SQL_NTS); ``` 5. **处理结果**: 可以通过遍历结果集获取数据。记得关闭资源: ```cpp SQLROWSET rs; while (SQLFetch(stmt) == SQL_SUCCESS) { // 处理每一行数据... } SQLFreeHandle(SQL_HANDLE_STMT, stmt); SQLDisconnect(dbc); SQLFreeHandle(SQL_HANDLE_DBC, dbc); SQLFreeHandle(SQL_HANDLE_ENV, env); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值