如何在查询中将单引号添加为字符串?

时间:2017-06-20 17:15:48

标签: c# sql sql-server

我正在尝试使用文本框获取文件目标路径并将其传递到数据库中。(在Visual Studio中开发)当查询运行时,会显示错误....

enter image description here

updateClark类中的方法user如下所示

public void updateClark(string _cid, string _path)
{
    SqlCommand cmd = new SqlCommand(@"UPDATE tbl_Path SET folder_path='" + _path + "' WHERE clark_id='" + _cid + "'", ConnectionDB.connection());
    cmd.ExecuteNonQuery();
}

我在代码中遗漏了什么?

5 个答案:

答案 0 :(得分:5)

既然您已编辑了问题以包含实际相关代码,那么您应该执行以下操作:

public void updateClark(string _cid, string _path)
{
    string command = "UPDATE tbl_Path SET folder_path=@folderPath WHERE clark_id=@clarkId";

    using (SqlCommand cmd = new SqlCommand(command, ConnectionDB.connection()))
    {
       cmd.Parameters.AddWithValue("folderPath", _path);
       cmd.Parameters.AddWithValue("clarkId", _cid);
       cmd.ExecuteNonQuery();
    }
}

答案 1 :(得分:3)

如果你使用SQLParameters,单引号将被正确处理,你不必担心SQL注入(有人可以在文本框中输入嵌套的SQL命令,他们会盲目地传回服务器)。

以下代码假定ConnectionDB.connection()方法打开与数据库的新连接。您应该考虑将您的一次性对象(如连接和命令)放在using块中,以便它们自动关闭和处理。

public static void updateClark(string cid, string path)
{
    var cmdStr = "UPDATE tbl_Path SET folder_path=@path WHERE clark_id=@cid";

    using (var con = ConnectionDB.connection())
    {
        con.Open();

        using (var cmd = new SqlCommand(cmdStr, con))
        {
            cmd.Parameters.AddWithValue(new SqlParameter("@path", path));
            cmd.Parameters.AddWithValue(new SqlParameter("@cid", cid));
            cmd.ExecuteNonQuery();
        }
    }
}

答案 2 :(得分:1)

这是您应该安全地访问数据库而无需处理数据的方式。

private static void SqlCommandPrepareEx(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlCommand command = new SqlCommand(null, connection);

        // Create and prepare an SQL statement.
        command.CommandText =
            "INSERT INTO Region (RegionID, RegionDescription) " +
            "VALUES (@id, @desc)";
        SqlParameter idParam = new SqlParameter("@id", SqlDbType.Int, 0);
        SqlParameter descParam = 
            new SqlParameter("@desc", SqlDbType.Text, 100);
        idParam.Value = 20;
        descParam.Value = "First Region";
        command.Parameters.Add(idParam);
        command.Parameters.Add(descParam);

        // Call Prepare after setting the Commandtext and Parameters.
        command.Prepare();
        command.ExecuteNonQuery();

        // Change parameter values and call ExecuteNonQuery.
        command.Parameters[0].Value = 21;
        command.Parameters[1].Value = "Second Region";
        command.ExecuteNonQuery();
    }
}

MSDN

中窃取的代码段

答案 3 :(得分:1)

上面有很多好的答案,以防你寻找替代方案。

public void updateClark(string _cid, string _path)
{
    string sql = String.Format("UPDATE tbl_Path SET folder_path={0} WHERE clark_id={1}",path,cId);
    SqlCommand cmd = new SqlCommand(sql, ConnectionDB.connection());
    cmd.ExecuteNonQuery();
}

答案 4 :(得分:-2)

您需要用两个引号替换单引号。在上面的示例中,它似乎是变量txtPath。值"F:\Softwares\IDE's"需要以"F:\Softwares\IDE''s"传递。

祝你好运!