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

本文关键字:字段 自定义 文本 错误 数据库 值调用 | 更新日期: 2023-09-27 18:22:11

我的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>

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

好吧,从你所说的来看,几乎没有什么是错误的,连接似乎已经关闭:

  • 您应该在需要时创建连接,完成后释放连接
  • 邮政编码不是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;
        }
    }
}