替换方法机制

时间:2010-12-08 12:28:51

标签: c# .net asp.net sql-server

我遇到以下问题::

我想逃避以下角色'单引号:

通过以下方式进行此测试时有效:内置方法Replace("'","''");

如下面的代码:(只是一个测试)它的工作原理

protected void btn_insert_Click(object sender, EventArgs e)
{
            lbl.Text = string.Empty;
            SqlConnection mycon = new SqlConnection(Constr);`

            SqlCommand mycommand = new SqlCommand("INSERT INTO details VALUES('" + txt.Text.Replace("'", "''") + "','" + txt.Text.Replace("'", "''")+ "')", mycon);

            mycon.Open();
            int affectedRows = 0;

            affectedRows = mycommand.ExecuteNonQuery();
            mycon.Close();
        }

但我想通过数据访问层中的Insert方法推广我的解决方案以在整个应用程序中工作:

public static int InsertEntity(string tblName, Dictionary<string, string> dtParams)
        {
            int Result = -1;
            DBConnection DAL_Helper = new DBConnection("");
            string[] field_names = new string[dtParams.Count];
            dtParams.Keys.CopyTo(field_names, 0);
            string[] field_values = new string[dtParams.Count];
            dtParams.Values.CopyTo(field_values, 0);
            for (int i = 0; i < field_values.Length; i++)
            {
                field_values[i].Replace("'", "''");
            }
            string insertCmd = "INSERT INTO " + tblName + " (" + string.Join(",", field_names) + ") values ('" + string.Join("','", field_values) + "')";

            Result = DAL_Helper.Execute_NonQuery(insertCmd);
            return Result;
        }

虽然我使用Replace("'","''");

,但这并没有逃脱'单引号字符

问题是什么,如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

我强烈建议您使用Command Parameters集合而不是您的方法来使用SqlCommand.Parameters

问题出在这里:

        for (int i = 0; i < field_values.Length; i++)
        {
            field_values[i].Replace("'", "''");
        }

将其替换为:

        for (int i = 0; i < field_values.Length; i++)
        {
            field_values[i] = field_values[i].Replace("'", "''");
        }

答案 1 :(得分:3)

以decyclone的答案为基础。 CommandParameters是这里的方法,您只需使用自己的代码重新创建它。

我在这里找到了一个非常好的明确示例,用于向SQL语句提供params。

http://dotnetperls.com/sqlparameter

        using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection))
        {
            string dogName = "Mc'Dougal";
            //
            // Add new SqlParameter to the command.
            //
            command.Parameters.Add(new SqlParameter("Name", dogName));
            //
            // Read in the SELECT results.
            //
            SqlDataReader reader = command.ExecuteReader();
        }