1

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

        internal bool AddRecord()
        {
             string SQL = "exec SqlInsert ";

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

             return SqlDatabase.Overig(SQL);
        }
4

4 回答 4

5

像这样

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

 }
于 2013-05-02T12:32:00.330 回答
1

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

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

于 2013-05-02T12:34:50.073 回答
0

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

然后试试这个:

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("'","''");
}
于 2013-05-02T12:31:36.667 回答
0

处理 ' 的一种简单方法是添加 .Replace("'", "''")。这将用 '' 替换 SQL 可以处理的所有实例。

SQL += "'" + _sqlComputer.Replace("'", "''") + "', ";
SQL += "'" + _lastUpdatedBy.Replace("'", "''") + "', ";
SQL += "'" + DateTime.Now + "', ";
SQL += "'" + _softwareName.Replace("'", "''") + "' ";
于 2013-05-02T12:32:08.193 回答