解决 尝试在用户登录后填写用户控制中的文本框

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
99
编程经验
Beginner
当用户登录时,它们将被带到仪表板,在那里他们可以选择不同的选项。其中一个是"Account details"。在此用户控件中,我设置了一旦DataGridView中的行上单击“行”,就会设置文本框。

1615935786433.png.



我有一个挑选DataGridView的函数,这在我的申请中成功地工作到现在。


C#:
        public void FillingAccountDetails()
        {
            User_Control.Uc_updateAccountDetails ac = new User_Control.Uc_updateAccountDetails();
                                  
            string query = "SELECT firstName, lastName, address, contactNumber, emailAddress, password FROM Customer WHERE emailAddress =' " + signInEmail.Text.Trim() + " ' AND password = ' " + SqlDataFunctions.hashPassword(signInPassword.Text.Trim()) + " '  ";
            _IsqlDataFunctions.displayDataInGrid(query, ac.dataGridViewAccountDetails);


C#:
        public void displayDataInGrid(string query, DataGridView datagrid)
        {
            try
            {
                DataTable dt = new DataTable();
                connection.Open();
                SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
                adapter.Fill(dt);
                datagrid.DataSource = dt;
                connection.Close();
            }
            catch (Exception message)
            {
                MessageBox.Show(message.Message);
            }
        }


有人知道为什么不起作用吗?
 

附件

  • 1615935770689.png.
    1615935770689.png.
    15.2 KB · Views: 3
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+
请描述一下"isn't working"。你知道这个。你已经持续了这一论坛。你看到了什么行为?你期望看到什么行为?

除此之外,您还应该更好地了解使用Constenation的SQL查询来编写SQL查询。您正在邀请SQL注入攻击。以下强制性形象:
exploits_of_a_mom.png.
 

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
99
编程经验
Beginner
我期待填充目前登录的客户详细信息的网格视图。我在DisplayingRidview函数上放置了断点,并识别了电子邮件和密码。
然而,当用户登录时,我叫做该方法,当我拍摄仪表板并点击帐户详细信息时,将我带到另一个用户控制我试图填充空缺中的数据的网格视图。

这可能是由于网格视图上的设置吗?
1615937741101.png.


是的,我知道,我打算在某些时候改变它们,但只是想先把它搞定 :)
 

附件

  • 1615937726308.png.
    1615937726308.png.
    20.2 KB · Views: 3
Last edited:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+
在此行中设置调试器中的断点:
C#:
SqlDataAdapter adapter = new SqlDataAdapter(query, connection);

从调试器的AutoS或Locals选项卡,复制值 query 确切地。将值粘贴到MSSQL Studio或数据库的任何工具中,允许您输入并执行查询。在工具中运行该查询,查看您获得的结果。

由于在此代码上的单引号之后和之前,因此您怀疑您没有获得任何匹配项:
C#:
string query = "SELECT firstName, lastName, address, contactNumber, emailAddress, password FROM Customer WHERE emailAddress =' " + signInEmail.Text.Trim() + " ' AND password = ' " + SqlDataFunctions.hashPassword(signInPassword.Text.Trim()) + " '  ";

Notice: emailAddress =' " , " ' AND password = ' " , and " ' " . See the extra spaces?

如果您使用参数化查询,则这些额外的空格将是一个非问题。
 

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
99
编程经验
Beginner
在此行中设置调试器中的断点:
C#:
SqlDataAdapter adapter = new SqlDataAdapter(query, connection);

从调试器的AutoS或Locals选项卡,复制值 query 确切地。将值粘贴到MSSQL Studio或数据库的任何工具中,允许您输入并执行查询。在工具中运行该查询,查看您获得的结果。

由于在此代码上的单引号之后和之前,因此您怀疑您没有获得任何匹配项:
C#:
string query = "SELECT firstName, lastName, address, contactNumber, emailAddress, password FROM Customer WHERE emailAddress =' " + signInEmail.Text.Trim() + " ' AND password = ' " + SqlDataFunctions.hashPassword(signInPassword.Text.Trim()) + " '  ";

Notice: emailAddress =' " , " ' AND password = ' " , and " ' " . See the extra spaces?

如果您使用参数化查询,则这些额外的空格将是一个非问题。
好的,这很奇怪。我复制了查询并运行。没有结果。将电子邮件和密码更改为我存储在我的数据库中的另一个用户并工作。

然后我与该用户一起登录,但网格视图仍然没有填充。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+
将电子邮件和密码更改为我存储在我的数据库中的另一个用户并工作。
当你在做这个过程时,你(意外)是否删除了额外的空间?
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,892
地点
切萨皮克,va.
编程经验
10+
然后我与该用户一起登录,但网格视图仍然没有填充。
您是否尝试使用此特定用户重复从发布#4的步骤?
 

Sock1992

众所周知的成员
加入
5月20日,2020年
消息
99
编程经验
Beginner
好的,所以我做了另一个测试,我在登录页面上放了一个网格视图,看看查询是否有效,并猜测它所做了什么。

1615979018376.png.




尝试将数据加载到另一个用户控件时必须有关,我不知道为什么,但它不起作用 :不确定:

我再次在同一条线上放在同一条线上的断裂点,当登录另一个用户时。复制查询并运行。工作正常,结果显示了用户详细信息。

我正在考虑采取不同的方法。如果我存储了列表中的用户ID,那么,然后使用ID来填充网格视图一旦用户控件加载?类似于下面的代码的东西(不确定如何定位行中的第一个值)

C#:
        public void GetCustomerDetails(string query, string columnName, List<string> userDetails)
        {
            connection.Open();
            SqlDataAdapter da = new SqlDataAdapter(query, connection);
            DataTable dt = new DataTable();
            da.Fill(dt);

            if (dt.Rows.Count == 1)
            {
                
            }
        }
 
Last edited:
最佳 底部