C# 按连接Winforms的用户插入记录

C# 按连接Winforms的用户插入记录,c#,winforms,C#,Winforms,我有一个表格F1,用户将提供各自的凭据用户名和密码 成功登录后,控件移动到客户端窗体F2,并在其上的标签中显示欢迎用户名 客户端表单包含: 标签和文本框名称、地址、功能。。。 按钮插入 DataGridView绑定到DB名称、地址、函数、…、用户ID 现在,我想插入一个客户端 在填充文本框之后,我想添加一个客户端,显示连接的用户添加的客户端 例如:如果我在添加客户端之后使用用户名Rose登录,在我的datagridView中,显示Rose添加的插入行 我的登录代码和将用户名传递给客户端表单 这是

我有一个表格F1,用户将提供各自的凭据用户名和密码

成功登录后,控件移动到客户端窗体F2,并在其上的标签中显示欢迎用户名

客户端表单包含:

标签和文本框名称、地址、功能。。。 按钮插入 DataGridView绑定到DB名称、地址、函数、…、用户ID 现在,我想插入一个客户端

在填充文本框之后,我想添加一个客户端,显示连接的用户添加的客户端

例如:如果我在添加客户端之后使用用户名Rose登录,在我的datagridView中,显示Rose添加的插入行

我的登录代码和将用户名传递给客户端表单

这是我的插入代码:

我不知道该怎么做,我对c非常陌生,正在努力学习


提前感谢。

检查登录时,请按以下方式填写您的查询:

SELECT [Id], [UserName] from [Users] WHERE [UserName]=@UserName AND [Password]=@Password
然后存储登录成功时从查询中获得的[Id]和[UserName]。结果集包含一条记录。这样,您可以在每次需要时使用登录用户的用户名和id

例如:

var cmd = @"SELECT [Id], [UserName] FROM [Users] " +
          @"WHERE [UserName] = @UserName AND [Password] = @Password";
var cn = @"Data Source=User-PC\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True";
var da = new SqlDataAdapter(cmd, cn);
da.SelectCommand.Parameters.AddWithValue("@UserName", textBox1.Text);
da.SelectCommand.Parameters.AddWithValue("@Password", textBox2.Text);
var dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count == 1)
{
    int id = dt.Rows[0].Field<int>("Id");
    string userName = dt.Rows[0].Field<string>("UserName");
    //...
}
注:

您应该使用参数化查询来防止SQL注入攻击。
检查登录时,按以下方式编写查询:

SELECT [Id], [UserName] from [Users] WHERE [UserName]=@UserName AND [Password]=@Password
然后存储登录成功时从查询中获得的[Id]和[UserName]。结果集包含一条记录。这样,您可以在每次需要时使用登录用户的用户名和id

例如:

var cmd = @"SELECT [Id], [UserName] FROM [Users] " +
          @"WHERE [UserName] = @UserName AND [Password] = @Password";
var cn = @"Data Source=User-PC\SQLEXPRESS;Initial Catalog=timar;Integrated Security=True";
var da = new SqlDataAdapter(cmd, cn);
da.SelectCommand.Parameters.AddWithValue("@UserName", textBox1.Text);
da.SelectCommand.Parameters.AddWithValue("@Password", textBox2.Text);
var dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count == 1)
{
    int id = dt.Rows[0].Field<int>("Id");
    string userName = dt.Rows[0].Field<string>("UserName");
    //...
}
注:

您应该使用参数化查询来防止SQL注入攻击。
首先也是最重要的,参数化您的登录查询!目前,您非常容易受到SQL注入攻击!否则你会被别人看望

在回答您的问题时,将登录表单上的查询更改为返回用户Id和用户名

SqlDataAdapter sda = new SqlDataAdapter("select Id, Username from [User] where Username=@Username and Password=@Password", con);
现在,当您读取单个结果时,您可以从字段0获取Id,从字段1获取用户名

请注意,在该代码中,我将两者都传递给客户机表单。更新构造函数以在局部变量中保存这两条信息:

public class Client : Form
{
    private int _userId;

    public Client(int userId, string username)
    {
        InitializeComponent();

        _userId = userId;
        lblUser.Text = username;

        DisplayData();
        FillData();
    }
}
此后,您可以在客户端表单中的任意位置使用_userId。例如,在“保存”按钮中,单击:

cmd.Parameters.AddWithValue("@idUser",_userId);  

首先也是最重要的,参数化您的登录查询!目前,您非常容易受到SQL注入攻击!否则你会被别人看望

在回答您的问题时,将登录表单上的查询更改为返回用户Id和用户名

SqlDataAdapter sda = new SqlDataAdapter("select Id, Username from [User] where Username=@Username and Password=@Password", con);
现在,当您读取单个结果时,您可以从字段0获取Id,从字段1获取用户名

请注意,在该代码中,我将两者都传递给客户机表单。更新构造函数以在局部变量中保存这两条信息:

public class Client : Form
{
    private int _userId;

    public Client(int userId, string username)
    {
        InitializeComponent();

        _userId = userId;
        lblUser.Text = username;

        DisplayData();
        FillData();
    }
}
此后,您可以在客户端表单中的任意位置使用_userId。例如,在“保存”按钮中,单击:

cmd.Parameters.AddWithValue("@idUser",_userId);  


你的问题不清楚,你到底有什么问题?我在上面代码的注释中解释了我的问题,我想添加一个新的客户端,并想知道这是由WhomUser who's connected=Rose添加的?噢,实际问题在代码注释中-是的,这不是最好的地方!您可以记住登录用户并将其传递给form2,这是您想要的吗?您是否有一个用户表,其中包含每个用户的用户名Id?您的问题不清楚,您到底有什么问题?我在上面代码中的注释中解释了我的问题,我想添加一个新的客户端,并想知道它是由WhomUser who's connected=Rose添加的?哦,哦,实际的问题是在代码注释中-是的,这不是最好的地方!您可以记住登录用户并将其传递给form2,这是您想要的吗?您是否有一个用户表,其中包含每个用户用户名的Id?结果数据表的第一条记录同时包含Id和用户名。dt.行[0]。例如int id=dt.Rows[0].FieldId;字符串userName=dt.Rows[0].FieldUserName;如果我运行我的程序并尝试登录,它会显示一个错误:对象引用未定义。您似乎知道如何运行参数化命令,因此我没有将其添加到答案中。当然,您可以自己解决对象空引用异常。我的答案里没有密码。您需要更多帮助吗?我添加了一个示例,说明如何将参数化查询与数据适配器一起使用。您需要应用解决方案的任何其他帮助吗?result DataTable的第一条记录同时包含Id和用户名。dt.行[0]。例如int id=dt.Rows[0].FieldId;字符串userName=dt.Rows[0].FieldUserName;如果我运行我的程序并尝试登录,它会显示一个错误:对象引用未定义。您似乎知道如何运行参数化命令,因此我没有将其添加到答案中。当然,您可以自己解决对象空引用异常。我的答案里没有密码。需要更多帮助吗?我添加了一个示例,说明如何将参数化查询与数据适配器结合使用。应用solu还需要其他帮助吗 什么?