为了账号安全,请及时绑定邮箱和手机立即绑定

通过 C# 避免带有参数的 SQL 注入?

通过 C# 避免带有参数的 SQL 注入?

C#
慕村9548890 2022-11-21 21:50:34

我最近调整了我的代码以避免对 maria db 进行 SQL 注入,并在添加参数方面得到了帮助,当我使用参数方法页面时出现运行时错误


strSQL = "SELECT * from user where uid = @uid AND start >= @StartDate AND end <= @EndDate ";

DataSet ds = QueryDataSet(strSQL, uid , StartDate, EndDate);



public DataSet QueryDataSet(string strSQL,string uid , string StartDate, string EndDate)

{

    try

    {

        MySqlDataAdapter da = new MySqlDataAdapter(strSQL, DBconn);

        da.SelectCommand.Parameters.AddWithValue("@uid", uid );

        da.SelectCommand.Parameters.AddWithValue("@StartDate", StartDate);

        da.SelectCommand.Parameters.AddWithValue("@EndDate", EndDate);

        DataSet ds = new DataSet();

        da.Fill(ds);

        return ds;

    }

    catch (Exception ex)

    //catch

    {

        throw (new System.Exception(ex.Message));


    }

}

我对使用 maria db 比较陌生,所以感谢您的帮助


查看完整描述

1 回答

?
烙印99

TA贡献1522条经验 获得超12个赞

如果你想避免 SQL 注入,除了参数化查询之外的另一种方法是存储过程。


您可以从此处阅读它 => https://www.techonthenet.com/mariadb/procedures.php 或者您可以自己研究。


在 ASP.NET 应用程序中调用存储过程的演示方法:


using (MySqlConnection con = new MySqlConnection(constr))

{

    using (MySqlCommand cmd = new MySqlCommand("Customers_GetCustomer", con))

    {

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.AddWithValue("@CustId", customerId);


        using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd))

        {

            DataTable dt = new DataTable();

            sda.Fill(dt);


            GridView1.DataSource = dt;

            GridView1.DataBind();

        }

    }

}

(代码取自https://www.aspsnippets.com/Articles/Call-MySql-Stored-Procedure-with-Parameters-in-ASPNet-C-and-VBNet.aspx)


查看完整回答
反对 回复 2022-11-21
  • 1 回答
  • 0 关注
  • 12 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信