替换方法机制

Any*_*are 0 .net c# sql-server asp.net

我面临以下问题::

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

它通过以下方式进行测试:内置方法 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();
        }
Run Code Online (Sandbox Code Playgroud)

但我想通过数据访问层中的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;
        }
Run Code Online (Sandbox Code Playgroud)

虽然我使用,但这并没有逃避'单引号字符 Replace("'","''");

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

dec*_*one 5

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

问题在这里:

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

替换为:

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