c# - 运行查询,这里的设计好吗?

标签 c# asp.net

很抱歉在 ASP.net 上发布了这么多小问题,我正在慢慢掌握它。

我在我的页面上执行查询(工作):

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server">

    // When the registration form is submitted
    protected void regSubmit(object sender, EventArgs e)
    {
        // No erros so far
        Boolean anyError = false;
        string errorMessages = "";

        // Take all form values
        string username = txtUsername.Text;
        string password1 = txtPassword1.Text;
        string password2 = txtPassword2.Text;
        string emailAdd = txtEmail.Text;

        // Verify that username is unique
        using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDbConn"].ToString()))
        {
            SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tblUsers WHERE username = '" + username + "'", cn);
            cn.Open();
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            rdr.Read();
            int result = int.Parse(rdr[0].ToString()); //read a value
        }


        statusLabel.Text = username;
    }
</script>

我的问题是,这是最佳实践吗,我是否必须为我运行的每个查询都使用一个“using” block 和该内部结构,或者是否有更简单的方法?另外,我需要关闭任何东西吗?还是由垃圾工来处理?

在经典 ASP 中,我只会有一个

adoCon.execute("DELETE FROM TABLE")

或一个

rsCommon.open("SELECT * FROM TABLE"), adoCon
do until rsCommon.EOF

rscommon.movenext
loop
rsCommon.close

塔利霍!感谢您的任何帮助! 这对我来说似乎更简单直观。

最佳答案

汤姆,

您这里发生了一些不好的事情(抱歉这么直白)。我会查看以下内容:

  • 参数化您的查询以缓解 SQL注入(inject)攻击
  • 将您的逻辑分离到 DAL 和 BLL 层(或至少, 将其隔离以便在可能的情况下重用到类中)

此外,Boolean anyError = false; 从未被使用过,但我假设它供以后使用。

从好的方面来说,using block 的想法很好,所以请坚持下去。您可以在线查找引用资料以帮助解耦您的逻辑和参数化查询。

顺其自然

吉姆

关于c# - 运行查询,这里的设计好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3415968/

相关文章:

C# - 俄罗斯方 block 克隆 - 无法阻止正确响应箭头键组合

c# - .Net Windows Forms - 在等待异步工作时限制表单导航

c# - 如何通过 Unity 使用 WebGL/C# 在新选项卡上打开链接?

c# - 如何在 C# 中更改变量类型?

c# - 如何从解决方案中的类访问我的 ASP.NET 页面上的控件?

c# - 哪种设计模式适合您? ASP.NET 与 MySQL

c# - Google API 获取 Document/SpreadSheet 的内容

c# - 为什么页面加载事件没有触发?

c# - 正则表达式查找内部 if 条件

c# - 在动态生成的菜单中获取所选项目的 ID