首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当其中一个值包含特殊字符时,存储过程将失败

当其中一个值包含特殊字符时,存储过程将失败
EN

Stack Overflow用户
提问于 2013-05-02 20:26:21
回答 4查看 2.2K关注 0票数 1

我对一个特殊的角色有个问题。因为当有‘字符时,代码将失败。如何通过使用下面的存储过程使其与特殊字符一起工作。

代码语言:javascript
运行
复制
        internal bool AddRecord()
        {
             string SQL = "exec SqlInsert ";

             SQL += "'" + _sqlComputer + "', ";
             SQL += "'" + _lastUpdatedBy + "', ";
             SQL += "'" + DateTime.Now + "', ";
             SQL += "'" + _softwareName + "' ";

             return SqlDatabase.Overig(SQL);
        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-02 20:32:00

像这样

代码语言:javascript
运行
复制
SqlCommand cmd = new SqlCommand("SqlInsert", sqlCon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 25).Value = _sqlComputer ;
cmd.Parameters.Add("@Param2", SqlDbType.VarChar, 50).Value = _lastUpdatedBy ;
cmd.Parameters.Add("@Param3", SqlDbType.DateTime).Value = DateTime.Now
cmd.Parameters.Add("@Param4", SqlDbType.Varchar,50).Value = _softwareName ;

sqlCon.Open();
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
sqlCon.Close();
dr.Dispose();
cmd.Dispose();

根据您的需求进行编辑

而不是像这样传递值

代码语言:javascript
运行
复制
SqlDatabase.Overig(SQL);

执行此操作

代码语言:javascript
运行
复制
SqlDatabase.Overig(_sqlComputer,_lastUpdatedBy,DateTime.Now,_softwareName);

并在Overig方法中进行更改,如

代码语言:javascript
运行
复制
Overig(String sqlCom, string UpdatedBy, DateTime dat, string software)
{
SqlCommand cmd = new SqlCommand("SqlInsert", sqlCon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 25).Value = sqlCom;
cmd.Parameters.Add("@Param2", SqlDbType.VarChar, 50).Value = UpdatedBy;
cmd.Parameters.Add("@Param3", SqlDbType.DateTime).Value = dat
cmd.Parameters.Add("@Param4", SqlDbType.Varchar,50).Value = software;

sqlCon.Open();
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
sqlCon.Close();
dr.Dispose();
cmd.Dispose();

 }
票数 5
EN

Stack Overflow用户

发布于 2013-05-02 20:34:50

如果通过构建SQLCommand对象并向其添加参数来执行SQL,则使用特殊字符作为参数会更容易。

在这个相关的问题中有一个很好的例子来说明如何做到这一点:Call a stored procedure with parameter in c#

票数 1
EN

Stack Overflow用户

发布于 2013-05-02 20:31:37

,因为当有‘字符时,代码将失败

然后试试这个:

代码语言:javascript
运行
复制
internal bool AddRecord()
        {
             string SQL = "exec SqlInsert ";

             SQL += "'" + PrepeareForSql(_sqlComputer) + "', ";
             SQL += "'" + PrepeareForSql(_lastUpdatedBy) + "', ";
             SQL += "'" + DateTime.Now + "', ";
             SQL += "'" + PrepeareForSql(_softwareName) + "' ";

             return SqlDatabase.Overig(SQL);
        }

private string PrepeareForSql(string s)
{
   return s.Replace("'","''");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16338037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档