c# - 在 sql 查询 c# 中转义单引号

标签 c# sql sql-server

我的 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/

相关文章:

c# - 使用抽象类作为方法参数和将泛型参数限制到所述抽象类之间有什么明显的区别吗?

c# - 运行代码片段并呈现结果的基本 VS 扩展(类似于 watch )

c# - 使用 Smo.Backup 将 SQL Server 数据库备份到字符串

sql-server - 通过 SQL Server 查询分析器更新长字符串

c# - 存储过程读取xml,有什么更好的办法吗? SQL 服务器 2008

c# - 如何使用 Emgu c# 去饱和图像

c# - 工作队列和用户上下文

sql - 为什么这个查询需要一个参数?

mysql - 如何将多行分组并连接成 20 组

mysql - SQL查询忽略条件