从数据表中获取值并将其传递给标签
Posted
技术标签:
【中文标题】从数据表中获取值并将其传递给标签【英文标题】:Get values from data table and pass it to label 【发布时间】:2021-06-19 18:41:06 【问题描述】:我想在用户成功登录后获取FullName
,并将他们的FullName
放入label
string conn = ConfigurationManager.ConnectionStrings["SystemDatabase"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(conn);
sqlconn.Open();
string query = "Select * from UserAccount where Username = '" + txtUsername.Text.Trim() + "' and Password = '" + txtPassword.Text.Trim() + "'";
SqlDataAdapter sda = new SqlDataAdapter(query,sqlconn);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count == 1)
FrmPOS frm = new FrmPOS();
frm.Show();
frm.lblCashierName.Text = ?//here i want to display the fullname from the UserAccount table.
this.Hide();
我不知道如何从DataTable
获取数据。或者有没有其他方法可以做到?
【问题讨论】:
DataTable 由多行组成,您需要选择单个 DataRow 并在方括号中提及列名以获得您想要的文本。注意:您应该在 DataRow 中提及正确的给定 sql 列名请参阅this 这能回答你的问题吗? Get data from datatable into a string in asp.net SQL Injection alert - 你应该不将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 【参考方案1】:您可以使用 dt.Rows[0]["FullName"].ToString()
从第一条记录中获取 FullName 列。
using (SqlConnection sqlconn = new SqlConnection (conn))
sqlconn.Open();
string query = "SELECT * FROM UseAccount WHERE Username = @Username AND Password = @Password";
using (SqlCommand cmd = new SqlCommand(query, sqlconn)
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim());
using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
DataTable dt = new DataTable();
adp.Fill(dt);
if (dt != null || dt.Rows.Count > 0)
FrmPOS frm = new FrmPOS();
frm.Show();
frm.lblCashierName.Text = dt.Rows[0]["FullName"].ToString();
this.Hide();
无论如何,我想增强您的源代码以获得一些最佳实践
-
将 using 块应用于 SqlConnection、SqlCommand 和 SqlDataAdapter。这样当每个进程结束时,using块就会执行
Dispose
来释放资源。
应用带有参数的 SqlCommand(也称为参数化查询),因为您可以通过将值连接到命令中来导致 SQL Injection。
检查 DataTable 以确保它有记录,然后才继续;旨在解决无数据返回时可能发生的NullReferenceException。
【讨论】:
【参考方案2】:你可以试试这个
string conn = ConfigurationManager.ConnectionStrings["SystemDatabase"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(conn);
sqlconn.Open();
string query = "Select * from UserAccount where Username = '" + txtUsername.Text.Trim() + "' and Password = '" + txtPassword.Text.Trim() + "'";
SqlCommand command = new SqlCommand(query,sqlconn);
SqlDataReader reader = command.ExecuteReader();
if (reader.Read() == true)
FrmPOS frm = new FrmPOS();
frm.Show();
frm.lblCashierName.Text = reader["FullName"].ToString();
this.Hide();
【讨论】:
不客气@SimSim,但我忘了更改SqlCommand的变量名,应该是command
,哈哈:)
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
是的,我同意@marc_s 的建议
@marc_s 是的,先生,我会用它制作一个stored procedure
以上是关于从数据表中获取值并将其传递给标签的主要内容,如果未能解决你的问题,请参考以下文章
从服务器获取数据并将值传递给 React 中的子组件(useEffect、useFetch..)