首页 >数据库 >mysql教程 >如何使用 C# 在 MySQL 中安全地执行参数化查询?

如何使用 C# 在 MySQL 中安全地执行参数化查询?

DDD
DDD原创
2024-12-14 02:26:11475浏览

How to Securely Execute Parameterized Queries in MySQL using C#?

使用 C# 在 MySQL 中进行参数化查询

参数化查询是数据库编程的重要组成部分。它们允许您将 SQL 语句与查询中使用的数据分开。这有助于防止 SQL 注入攻击,并使您的代码更具可读性和可维护性。

要在 C# 中使用参数化查询,您需要创建一个 MySqlCommand 对象并向其添加参数。您可以使用 MySqlCommand 对象的Parameters 属性来执行此操作。

以下代码显示了如何使用参数化查询从 USERS 表中选择数据的示例:

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_2 = ?;";

public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.Add(new MySqlParameter("", val1));
    m.Parameters.Add(new MySqlParameter("", val2));
    MySqlDataReader r = m.ExecuteReader();
    if (r.HasRows)
        level = Convert.ToInt32(r.GetValue(0).ToString());
    r.Close();
    return true;
}

This代码将编译并运行,不会出现错误。但是,它不会返回预期的结果。问题是 SQL 语句中的参数名称与 MySqlCommand 对象中的参数名称不匹配。

要解决此问题,需要更改 SQL 语句中的参数名称以匹配 MySqlCommand 对象中的参数名称MySqlCommand 对象。您可以通过使用 @ 字符后跟参数名称来完成此操作。

以下代码显示如何解决该问题:

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";

public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
    level = Convert.ToInt32(m.ExecuteScalar());
    return true;
}

此代码将编译并运行,不会出现错误。它还会返回预期的结果。

以上是如何使用 C# 在 MySQL 中安全地执行参数化查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn