使用最少代码从 SQL 数据库行填充文本框

Posted

技术标签:

【中文标题】使用最少代码从 SQL 数据库行填充文本框【英文标题】:Populate TextBoxes from SQL Database Row Using Minimum Code 【发布时间】:2016-04-15 03:47:28 【问题描述】:

我有一个“我的用户帐户”网页,其中包含 18 个控件,我想从我的 Azure 数据库中的 18 列中填充这些控件。我已将用户登录电子邮件设置为会话值“新”,用于搜索数据库并找到相应的行。

我正在使用以下代码,但我认为这执行起来很慢。

谁能建议一种更有效的编码方式?

try

    if (Session["New"] == null)
    
        Response.Redirect("~/Account/Login.aspx"); //*****CHANGE REDIRECT WEBPAGE*****
    
    else
    
        string str = Convert.ToString(Session["New"]);
        string cpUsersConnection = ConfigurationManager.ConnectionStrings["cp_usersConnection"].ToString();
        SqlConnection oSqlConnection = new SqlConnection(cpUsersConnection);
        oSqlConnection.Open();
        SqlCommand oSqlCommand = new SqlCommand();
        oSqlCommand.Connection = oSqlConnection;
        oSqlCommand.CommandType = CommandType.Text;
        oSqlCommand.CommandText = "select account_no from users where email_1 = '" + str + "'";
        SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter();
        oSqlDataAdapter.SelectCommand = oSqlCommand;
        SqlDataReader reader = oSqlCommand.ExecuteReader();

        if (reader.Read())
        
            AcNo.Text = reader["account_no"].ToString();
        

        string str1 = Convert.ToString(Session["New"]);
        string cpUsersConnection1 = ConfigurationManager.ConnectionStrings["cp_usersConnection"].ToString();
        SqlConnection oSqlConnection1 = new SqlConnection(cpUsersConnection);
        oSqlConnection.Open();
        SqlCommand oSqlCommand1 = new SqlCommand();
        oSqlCommand1.Connection = oSqlConnection;
        oSqlCommand1.CommandType = CommandType.Text;
        oSqlCommand1.CommandText = "select registration_date from users where email_1 = '" + str + "'";
        SqlDataAdapter oSqlDataAdapter1 = new SqlDataAdapter();
        oSqlDataAdapter1.SelectCommand = oSqlCommand1;
        SqlDataReader reader1 = oSqlCommand1.ExecuteReader();

        if (reader1.Read())
        
            RegDate1.Text = reader1["registration_date"].ToString();
        

    

catch

    if (Session["New"] == null)
    
        Response.Redirect("~/Account/Login.aspx"); //*****CHANGE REDIRECT WEBPAGE*****
    

    AcNo.Text = "";
    RegDate1.Text = "";
    SetDBdateMessages.Text = "User Session Error - Please Contact Support";

一如既往地非常感谢您的想法。

【问题讨论】:

修改后的代码中没有任何内容可以添加杂散双引号。相反,我认为您误解了调试器显示的字符串,该字符串显示了一个初始双引号,后跟文本、许多空格和一个在小工具提示中不可见的最终双引号。尝试添加一个 Trim() var findBusType = reader1["business_type"].ToString().Trim(); 你说得对,这不是一个流浪报价。 Trim 给了我“广告”,但它仍然没有选择我的 DropDownList 中的项目。 如何填写 DropDownList?仅当您已用字符串填充它或用于填充 DropDownList 的类具有对 ToString() 的覆盖时,对 ComboBox 的项目调用 ToString 才能正常工作。我建议您可以发布一个新问题来详细说明该问题。不要继续在原来的问题中添加新问题,否则会越来越让其他读者感到困惑。 好的,我发了一个新问题***.com/questions/34712312/… 【参考方案1】:

SQL 中的 SELECT 语句允许选择要从表中检索的字段。您一次不限于一个字段。

.....
string cmdText = @"select account_no,registration_date, other_field1, 
                   other_field2, other_fieldN
                   from users 
                   where email_1 = @email";

using(SqlConnection oSqlConnection = new SqlConnection(cpUsersConnection))
using(SqlCommand oSqlCommand = new SqlCommand(cmdText, oSqlConnection))

     oSqlConnection.Open();
     oSqlCommand.Parameters.Add("@email", SqlDbType.NVarChar).Value = str;
     using(SqlDataReader reader = oSqlCommand.ExecuteReader())
     
        if (reader.Read())
        
             AcNo.Text = reader["account_no"].ToString();
             RegDate1.Text = reader["registration_date"].ToString();
             otherTextBox.Text = reader["other_field1"].ToString();
             ... and so on ...
        
    

在这个例子中有两点需要强调:

定义您的 sql 语句,用单个字符串声明您要检索的所有字段,并使用参数占位符而不是字符串连接 将一次性对象放入 using 语句中以正确 当你退出 using 块时处理它们

【讨论】:

谢谢,我已经更新了它,但我仍然想知道是否有更短的方法......类似于:'SELECT FOR EACH column in MYTABLE value FROM tableName' 你可以看看ASP.NET DataBinding model 答案中的代码似乎在某处生成了一个额外的引号。我已经用更新编辑了我原来的问题,有什么想法吗?谢谢。 @史蒂夫

以上是关于使用最少代码从 SQL 数据库行填充文本框的主要内容,如果未能解决你的问题,请参考以下文章

用空值填充文本框

使用 SQL 查询填充 DataGridView 行

通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索

尝试使用 sql/vba 的结果填充文本框并出现 #Name 错误

使用 DataTable 中的文本填充 TextBox - 组合框

访问 VBA - 使用 VBA 的 SQL 语句使用文本框组合框值在表单上填充列表框 OR