很抱歉在 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/