使用最少代码从 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 数据库行填充文本框的主要内容,如果未能解决你的问题,请参考以下文章
通过消除除 seacrhed 行之外的所有其他行,通过文本框在已填充的列表视图中搜索
尝试使用 sql/vba 的结果填充文本框并出现 #Name 错误