我的 CandidateOp
类文件中有这个方法。
public SqlDataReader getpartyID(string partyName)
{
string query = "EXEC partyIDtoInsert'" +partyName+ "'";
return new DataAccessLayer().executeQuerys(query);
}
我正在传递表单中的 ComboBox
文本,并将 ID
传递给整数类型变量 tempPrID
。
SqlDataReader reader02 = new CandidateOP().getpartyID(cmbParty.Text);
if (reader02.HasRows)
{
while (reader02.Read())
{
tempPrID = (Int32)reader02[0];
}
reader02.Close();
}
else
{
MessageBox.Show("Please enter a valid Party Name", "Invalid DATA");
}
partyIDtoInsert
是我创建的一个存储过程,它在方法 getpartyID
中被调用,如前所示,以获取统一国家党的 ID。
EXEC partyIDtoInsert 'United National Party';
如果我有一个名为“United People's Freedom Alliance”的政党名称,那么如果我想插入该名称,我的存储过程执行代码如下所示。
EXEC partyIDtoInsert 'United People's Freedom Alliance';
在这种情况下,它将终点视为 People 的单引号,并返回我并返回 sql 异常。
如何在执行我的存储过程的语句中转义这个单引号问题。
最佳答案
你应该使用 SqlParameters 来避免 SQL 注入(inject)
string query = "EXEC partyIDtoInsert @PartyName";
Where you are executing the query
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@PartyName", partyName);
否则,问题是在 partyIDtoInsert 和“United People's Freedom Alliance”之间没有“”。如果你想继续使用“EXEC partyIDtoInsert'”应该是这样的。但这是错误的!了解 SQL 注入(inject)!
关于c# - 在 sql 查询 c# 中转义单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26313845/