在SQL查询中转义单引号c#

时间:2014-10-11 10:52:54

标签: 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中被调用,以获得联合国家党的身份。

EXEC partyIDtoInsert 'United National Party'; 

如果我有一个名为“United People's Freedom Alliance”的聚会名称,那么如果我想插入该名称,我的存储过程执行代码就像这样。

EXEC partyIDtoInsert 'United People's Freedom Alliance';

在这种情况下,它将结束点视为People的单引号并返回sql异常。

如何在语句中转义此单引号问题以执行我的存储过程。

5 个答案:

答案 0 :(得分:6)

只需用双引号替换单引号('),如''。

所以你的功能如下:

public SqlDataReader getpartyID(string partyName)
            {
                string query = "EXEC partyIDtoInsert'" +partyName.Replace("'", "''") + "'";
                return new DataAccessLayer().executeQuerys(query);
             }

我希望它能解决你的问题。 :)

答案 1 :(得分:4)

首先你应该使用SqlParameters来避免sql Injection

string query = "EXEC partyIDtoInsert @PartyName";

您要求查询的地方

SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.AddWithValue("@PartyName", partyName);

否则问题是你在partyIDtoInsert和'United People's Freedom Alliance'之间没有“”。如果你想继续使用"EXEC partyIDtoInsert '"像这样对我说。但这是错的!阅读sql Injection!

答案 2 :(得分:1)

由于Hitesh Mistry提供了这样的答案,它对我有用。

         public SqlDataReader getpartyID(string partyName)
        {
            string query = "EXEC partyIDtoInsert'" +partyName.Replace("'", "''") + "'";
            return new DataAccessLayer().executeQuerys(query);
         }

我想要一些人来解释如何使用sql参数。因为我想以这种方式实施它。 我没有得到sql参数提供的答案,因为它处理连接。我在这个名为DBconnect的单独类中使用连接。它是从另一个名为DataAccessLayer的类中调用的。

这就是我在DBConnect中使用连接的方式。

        public static string makeConnection()
    {
        string con = ConfigurationManager.ConnectionStrings["MyDb.Properties.Settings.ConString"].ToString();
        return con;
    }

答案 3 :(得分:0)

尝试EXEC partyIDtoInsert 'United People''s Freedom Alliance';

答案 4 :(得分:0)

我已经做了类似的事情,但没有任何异常。

partyName.Replace("'", $"{(char)39}");