将数据库中的值调用到文本字段 - 自定义错误

时间:2014-09-17 02:58:04

标签: c# asp.net .net

我的page_load函数中有以下代码,它基本上根据用户输入的邮政编码从数据库返回一个值。问题是,我遇到了自定义错误问题。当我的其他两个文本字段自动填充时,如果我等待5分钟然后提交,我将收到错误,但是,如果我在5分钟内提交,一切都按预期工作。如果我从数据库中调用值的方式是错误的,或者我如何修复此错误,请你告诉我?这是错误:

<!-- Web.Config Configuration File -->

<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

这是我的代码,(这是非常基本的,我是编程新手):

protected void Page_Load(object sender, EventArgs e)
{

    if (txtzip.Text.Length == 5)
    {
        SqlCommand Comm1 = new SqlCommand("SELECT TOP(1) * FROM zip_code WHERE zip = '" + Convert.ToInt32(txtzip.Text) + "'", conn);

        conn.Open();
        SqlDataReader DR1 = Comm1.ExecuteReader();
        if (DR1.Read())
        {
            txtstate.Text = DR1.GetValue(2).ToString();
            txtcity.Text = DR1.GetValue(1).ToString();
        }

        conn.Close();
    }

这是我的配置文件(请注意我用......替换了我的凭据):

<?xml version="1.0"?>
<configuration>
  <connectionStrings>

    <add name="aConn" connectionString="Data Source=.......;Initial Catalog=aspData;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=......"/>
        <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=......."/>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=........"/>
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
</configuration>

1 个答案:

答案 0 :(得分:4)

好吧,很少有问题,从你说的话来看,连接似乎已经关闭了:

  • 您应该在需要时创建连接,在完成后将其释放
  • 邮政编码的类型不是int。
  • Convert.ToInt32会因为领先而给你意想不到的结果 零将被删除。
  • 您还需要学习如何使用参数化查询,它将避免
  • SQL注入,也可以避免语法错误。
  • SELECT * + .GetValue()是一些错误的补充,如果你曾经的话 修改表结构或查询可以破坏代码,而不是列索引使用名称,不要使用通配符*选择特定字段。
  • 最后但并非最不重要的是,使用using statement它更多 处理物品的有效方法。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(
    "SELECT TOP(1) city, state  FROM zip_code WHERE zip = @zip", connection))
    {

        command.Parameters.Add(new SqlParameter("zip", txtzip.Text));

        SqlDataReader reader = command.ExecuteReader();
        if(reader.HasRows())
        {
            var city = reader["city"].ToString();
            var state = reader["state"].ToString();

            Console.WriteLine("City = {0}, State = {1}",
                city,
                state)      

            txtstate.Text = city
            txtcity.Text = state;
        }
    }
}