当其中一个值包含特殊字符时,存储过程失败
我有一个特殊字符的问题。 因为当有一个’字符时,代码将失败。 如何使用下面的存储过程使其与特殊字符一起使用。
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("'", "''") + "' ";