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

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

internal bool AddRecord() { string SQL = "exec SqlInsert "; SQL += "'" + _sqlComputer + "', "; SQL += "'" + _lastUpdatedBy + "', "; SQL += "'" + DateTime.Now + "', "; SQL += "'" + _softwareName + "' "; return SqlDatabase.Overig(SQL); } 

像这样

 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(); 

根据您的要求编辑

而不是像传递值

 SqlDatabase.Overig(SQL); 

做这个

 SqlDatabase.Overig(_sqlComputer,_lastUpdatedBy,DateTime.Now,_softwareName); 

并在Overig方法中进行更改

 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(); } 

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

在这个相关问题中有一个很好的示例如何执行此操作: 使用c#中的参数调用存储过程

因为当有一个’字符时,代码将失败

然后尝试这个:

 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("'","''"); } 

一种处理’的简单方法就是添加.Replace(“’”,“””)。 这将替换SQL可以处理的所有’with”实例。

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