这里我在我的CandidateOp类文件中有这个方法.
public SqlDataReader getpartyID(string partyName)
{
string query = "EXEC partyIDtoInsert'" +partyName+ "'";
return new DataAccessLayer().executeQuerys(query);
}
Run Code Online (Sandbox Code Playgroud)
我正在传递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");
}
Run Code Online (Sandbox Code Playgroud)
这partyIDtoInsert是我创建的一个存储过程,它正在getpartyID如前所示的方法中被调用,以获得联合国家党的身份.
EXEC partyIDtoInsert 'United National Party';
Run Code Online (Sandbox Code Playgroud)
如果我有一个名为"United People's Freedom Alliance"的聚会名称,那么如果我想插入该名称,我的存储过程执行代码就像这样.
EXEC partyIDtoInsert 'United People's Freedom Alliance';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它将结束点视为People的单引号并返回sql异常.
如何在语句中转义此单引号问题以执行我的存储过程.
小智 6
只需用双引号替换单引号('),如''.
所以你的功能看起来像:
public SqlDataReader getpartyID(string partyName)
{
string query = "EXEC partyIDtoInsert'" +partyName.Replace("'", "''") + "'";
return new DataAccessLayer().executeQuerys(query);
}
Run Code Online (Sandbox Code Playgroud)
我希望它能解决你的问题.:)
首先,您应该使用SqlParameters避免sql注入
string query = "EXEC partyIDtoInsert @PartyName";
Run Code Online (Sandbox Code Playgroud)
您在哪里执行查询
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@PartyName", partyName);
Run Code Online (Sandbox Code Playgroud)
否则,问题在于partyIDtoInsert与“美国人民自由联盟”之间没有“”。如果您想继续使用,请向"EXEC partyIDtoInsert '"我发送这样的邮件。但这是错误的!了解有关sql Injection的信息!