多语言界面软件开发框架 - 初始化多语言时发生单引号错误(解决方案)
多语言界面软件开发框架 - 初始化多语言时发生单引号错误(解决方案)程序初始化多语言时发生单引号错误,如下图:

错误原因:
前端传入单引号文本内容,导致SQL错误。
解决方案:
1. 替换系统数据库(CSFrameworkXX_System.dbo.usp_InitLanguage存储过程
SQL Code:
ALTER PROCEDURE [dbo].[usp_InitLanguage]
@LanType VARCHAR(10),
@ObjectID NVARCHAR(500),
@LanData NVARCHAR(500),
@ItemType VARCHAR(20)
AS
BEGIN
/**********************************************************
程序说明:初始化一条多语言资料
SELECT * FROM dbo.sys_Language
usp_InitLanguage 'CHS','TEST','测试SSS','Control'
usp_InitLanguage 'CHT','TEST','测试TTT','Message'
usp_InitLanguage 'CHT','TE2ST','测''试''TTT','Message'
***********************************************************/
DECLARE @SQL NVARCHAR(MAX),@Value NVARCHAR(500)
IF EXISTS(SELECT * FROM dbo.sys_Language WHERE ObjectID=@ObjectID)
BEGIN
IF @LanType='CHS' UPDATE sys_Language SET CHS=@LanData WHERE ObjectID=@ObjectID
IF @LanType='CHT' UPDATE sys_Language SET CHT=@LanData WHERE ObjectID=@ObjectID
IF @LanType='ENG' UPDATE sys_Language SET ENG=@LanData WHERE ObjectID=@ObjectID
IF @LanType='VN' UPDATE sys_Language SET VN=@LanData WHERE ObjectID=@ObjectID
END
ELSE
BEGIN
IF @LanType='CHS' INSERT INTO sys_Language(ObjectID,ItemType,CHS,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='CHT' INSERT INTO sys_Language(ObjectID,ItemType,CHT,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='ENG' INSERT INTO sys_Language(ObjectID,ItemType,ENG,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='VN' INSERT INTO sys_Language(ObjectID,ItemType,VN,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
END
END
//来源:C/S框架网 | www.csframework.com | QQ:23404761
ALTER PROCEDURE [dbo].[usp_InitLanguage]
@LanType VARCHAR(10),
@ObjectID NVARCHAR(500),
@LanData NVARCHAR(500),
@ItemType VARCHAR(20)
AS
BEGIN
/**********************************************************
程序说明:初始化一条多语言资料
SELECT * FROM dbo.sys_Language
usp_InitLanguage 'CHS','TEST','测试SSS','Control'
usp_InitLanguage 'CHT','TEST','测试TTT','Message'
usp_InitLanguage 'CHT','TE2ST','测''试''TTT','Message'
***********************************************************/
DECLARE @SQL NVARCHAR(MAX),@Value NVARCHAR(500)
IF EXISTS(SELECT * FROM dbo.sys_Language WHERE ObjectID=@ObjectID)
BEGIN
IF @LanType='CHS' UPDATE sys_Language SET CHS=@LanData WHERE ObjectID=@ObjectID
IF @LanType='CHT' UPDATE sys_Language SET CHT=@LanData WHERE ObjectID=@ObjectID
IF @LanType='ENG' UPDATE sys_Language SET ENG=@LanData WHERE ObjectID=@ObjectID
IF @LanType='VN' UPDATE sys_Language SET VN=@LanData WHERE ObjectID=@ObjectID
END
ELSE
BEGIN
IF @LanType='CHS' INSERT INTO sys_Language(ObjectID,ItemType,CHS,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='CHT' INSERT INTO sys_Language(ObjectID,ItemType,CHT,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='ENG' INSERT INTO sys_Language(ObjectID,ItemType,ENG,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
IF @LanType='VN' INSERT INTO sys_Language(ObjectID,ItemType,VN,CreateTime) VALUES (@ObjectID,@ItemType,@LanData,GETDATE())
END
END
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2. 修改LanDatabase.cs Get方法
C# Code:
//将一个单引号变成两个(跟SQL语法是一样的).
//所以在使用Select方法或DataView的时候,一定要注意把字符条件值的一个单引号改成两个单引号,执行
if (objectID.IndexOf("'") >= 0) objectID = objectID.Replace("'", "''");
DataRow[] rs = _languageData.Select("ObjectID='" + objectID + "'");
//来源:C/S框架网 | www.csframework.com | QQ:23404761
//所以在使用Select方法或DataView的时候,一定要注意把字符条件值的一个单引号改成两个单引号,执行
if (objectID.IndexOf("'") >= 0) objectID = objectID.Replace("'", "''");
DataRow[] rs = _languageData.Select("ObjectID='" + objectID + "'");
//来源:C/S框架网 | www.csframework.com | QQ:23404761

适应版本:
CSFramework标准版V2.3
CSFramework旗舰版V5.0

参考文档:
C/S开发框架:系统数据库与账套数据库合并解决方案|C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
OracleException:“ORA|00942: 表或视图不存在”解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将项目模块(Project)添加到VS解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将窗体(Form)源码加入到VS解决方案|C/S开发框架
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6旗舰版 | 基础资料窗体改装主从子表(多级明细表)解决方案|C/S开发框架
升级到.NET8 LINQ Where关键字 'WITH' 附近有语法错误解决方案|C/S开发框架
VS2022编译解决方案为什么会生成2级Debug子目录|C/S开发框架
CSFramework.Workflow | 可视化工作流引擎 | 业务系统集成解决方案|流程引擎
VS2022 工具箱没有可用的控件解决方案
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
标准主从表界面增加一个明细表解决方案(不变更BusinessData模型的情况下)|C/S开发框架
C/S开发框架:系统数据库与账套数据库合并解决方案|C/S开发框架
EFCore+Scheme(数据库架构)实现分库分表支持多种主流数据库解决方案|C/S开发框架
达梦数据库使用DmBulkCopy批导数据解决方案|C/S开发框架
OracleException:“ORA|00942: 表或视图不存在”解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将项目模块(Project)添加到VS解决方案|C/S开发框架
CSFramework.CodeGeneratorV6.0|将窗体(Form)源码加入到VS解决方案|C/S开发框架
代码生成器:直连模式+WebApi生成的源码集成到VS解决方案|C/S开发框架
SQLSERVER:误删Windows登录用户而sa禁用,导致无法使用Windows身份验证解决方案|C/S开发框架
VS2022不能打开窗体设计器解决方案(无法设计窗体)|C/S开发框架
CSFrameworkV6旗舰版 | 基础资料窗体改装主从子表(多级明细表)解决方案|C/S开发框架
升级到.NET8 LINQ Where关键字 'WITH' 附近有语法错误解决方案|C/S开发框架
VS2022编译解决方案为什么会生成2级Debug子目录|C/S开发框架
CSFramework.Workflow | 可视化工作流引擎 | 业务系统集成解决方案|流程引擎
VS2022 工具箱没有可用的控件解决方案
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
标准主从表界面增加一个明细表解决方案(不变更BusinessData模型的情况下)|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
