Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Form1文本框值传递给Form2按钮_C#_Sql Server_Winforms - Fatal编程技术网

C# 将Form1文本框值传递给Form2按钮

C# 将Form1文本框值传递给Form2按钮,c#,sql-server,winforms,C#,Sql Server,Winforms,我的项目中有两个表格(表格1和表格2) 在Form1上,我有两个文本框,如“登录”表单,其中要求用户输入用户名(textboxUsername)和密码(textboxPassword)。当用户登录时,会弹出Form2 现在在Form2中,我有一个按钮1和dataGridView1。当我按下按钮1时,我想显示我在Form1(textboxUsername)中输入的所选用户 我想根据保存在SQL Server中的用户名获取该用户 表单2按钮1代码: private void button1_Cli

我的项目中有两个表格(表格1和表格2)

在Form1上,我有两个文本框,如“登录”表单,其中要求用户输入用户名(textboxUsername)和密码(textboxPassword)。当用户登录时,会弹出Form2

现在在Form2中,我有一个按钮1和dataGridView1。当我按下按钮1时,我想显示我在Form1(textboxUsername)中输入的所选用户

我想根据保存在SQL Server中的用户名获取该用户

表单2按钮1代码:

 private void button1_Click(object sender, EventArgs e)
    {
        string constring = @"Data Source=V-K\;Initial Catalog=ATMKlientet;Integrated Security=True";
        SqlConnection conDataBase = new SqlConnection(constring);
        SqlCommand cmdDataBase = new SqlCommand(" select * from Clients ;", conDataBase);

        try
        {
            SqlDataAdapter sda = new SqlDataAdapter();
            sda.SelectCommand = cmdDataBase;
            dbdataset = new DataTable();
            sda.Fill(dbdataset);
            BindingSource bSource = new BindingSource();

            bSource.DataSource = dbdataset;
            dataGridView1.DataSource = bSource;
            sda.Update(dbdataset);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

    }
在本例中,我想在Form2中调用Form1 textBoxUsername的部分是:

(" select * from Clients where Username='" + this.textBoxUsername + "';",  conDataBase);

不需要新的DB请求,因为表单中已经有用户名,只需通过相应的构造函数将其发送到表单2:

public void Form2 (String userName){...}
在Form2中,添加一个新构造函数:

public void Form2 (String userName){...}
在表格1中:

Form 2 = new Form2 (this.textBoxUsername.Text)

在Form1中,当您打开第二个表单时,可能

 Form2 f = new Form2();
 f.ShowDialog();
在这里,您可以更改将textbox的值传递给Form2的构造函数的调用

 Form2 f = new Form2(textBoxUserName.Text);
 f.ShowDialog();
在Form2构造函数中,您接收该值并将其存储在类级全局变量中

public class Form2: Form
{
    private string currentUserName = string.Empty;
    public Form2(string userName)
    {
        currentUserName = userName;
    }
}
现在您可以使用内部私有变量
currentUserName
进行查询

请注意,不要使用字符串连接来生成sql命令。始终使用参数化查询:

SqlCommand cmd = new SqlCommand("select * from Clients where Username=@uname", conDataBase);
cmd.Parameters.AddWithValue("@uname", currentUserName);
.....

使用字符串连接是危险的,因为您的代码容易受到Sql注入攻击,您需要采取适当的措施进行字符串、十进制和日期解析。(例如,如果用户名包含一个单引号,字符串连接将生成一个无效的SQL语句,而不使用两个引号正确替换单引号)

谢谢!!现在,我可以获得我在表格1中输入的所选客户端。:)现在在Form2上,这个登录用户有一个名为Money的专栏。所以我可以创建一个文本框,在其中输入一个值(例如50)并根据当前登录的用户从数据库中提取它吗?如果这个用户的Money列有100美元,当我提取50美元时,在数据库中保留50美元?请帮忙,谢谢!现在回答这个问题有点困难。我建议用一个代码示例准备一个新问题并发布。通过这种方式,你比直接在这里问我在哪里是唯一一个被你的新问题通知的人更关注你的问题。这个问题的基本答案是不要。拥有一个用户类并通过事件将其链接起来(一个界面也不错),然后两个表单都“知道”了登录界面,而彼此一无所知。