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("'","''");
有什么问题,如何解决这个问题?
我强烈建议你使用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)