C#如何通过ID从数据表中获取两列值

     2023-04-11     144

关键词:

【中文标题】C#如何通过ID从数据表中获取两列值【英文标题】:C# how to get two column values by ID from a datatable 【发布时间】:2021-04-14 03:18:13 【问题描述】:

我对数据库和SQL不太了解,所以我想在这里寻求帮助,虽然我知道这应该是基本知识,但作为一个新手我不知道从哪里开始。

我在弄清楚如何从数据表中获取特定值时遇到问题,我已经使用以下代码在 form2 中拥有 ID

                cmd = new SqlCommand("select UserID from Users where UserName='" + textBox1.Text + "' and UserPassword='" + textBox2.Text + "'", cn);
                object result = cmd.ExecuteScalar();
                if (result != null)
                
                    loginresult = 1;
                    LoginUserID = Convert.ToInt32(result);
                    AdminRights = ???; //how can I get this value from datatable?
                    UserRights = ???; //how can I get this value from datatable?
                    this.Close();
                

现在在 form1 中,我想通过 ID 获取 AdminRights 或 UserRights 的值,我有这个代码:

        private void button7_Click(object sender, EventArgs e) // Button to Form2
        
            Form2 win_form2 = new Form2();
            win_form2.ShowDialog();
            if (win_form2.loginresult == 1)
            
                label4.Text = string.Format("User ID: 0", win_form2.LoginUserID.ToString()); // Gets and places specific user ID
                
                if (win_form2.UserRights = 0 && win_form2.AdminRights = 1) // Check if the ID has AdminRights
                     label5.text = string.Format("Rights: 0", "Admin") // If true, do the following
                else if (win_form2.UserRights = 1 && win_form2.AdminRights = 0) // Check if the ID has UserRights
                     label5.text = string.Format("Rights: 0", "User") // If true, do the following
            
        

我的数据表:

用户 ID (PK 1,1) 用户名(字符串) 用户密码(字符串) AdminRights (int)(值可以是 0 或 1,并且不能与 UserRights 的值相同) UserRights (int)(值可以是 0 或 1,并且不能与 AdminRights 的值相同)

那么最后,我如何访问数据表并在 form2 中获取 UserRights 和 AdminRights 值?

注意:我知道我有关于密码和 SQL 注入的非常危险的代码,现在我只想让它工作。

【问题讨论】:

警告:您的第一个代码块中的代码很容易受到注入攻击!您需要为您的查询参数化。此外,您的查询暗示您正在存储纯文本密码;这也是一个巨大的担忧。您应该将密码存储为散列和加盐值; 从不作为纯文本。 我知道这一点,但是现在我希望它能够工作,我仍在尝试全面了解 SQL。 您需要使用ExecuteReaderDatatable.Load 【参考方案1】:

您可以按名称访问列,如下所示,使用schema 或使用 ie 数据表(但请注意,您应该使用命令参数,不要直接从用户输入中将任何值放入查询中)

using (SqlConnection connection = new SqlConnection(
           connectionString))

    connection.Open();

    SqlCommand command = new SqlCommand($"SELECT * FROM TABLE_NAME WHERE UserID = your_user_id", connection);
    SqlDataReader reader = command.ExecuteReader();
    while (_reader.Read())
    
      // get the results of each column
      var adminRights =  reader["AdminRights "] as string;
      var userRights = reader["AdminRights "] as string;
    


// usage with parameters
SqlCommand command = new SqlCommand("SELECT * FROM TABLE_NAME WHERE UserID =@user", sql);
command.Parameters.AddWithValue("@user", your_user_id);

【讨论】:

【参考方案2】:

您可以使用以下示例直接访问 SQl 列。

例子:

using (SqlConnection con = new SqlConnection(connectionString))
            
                using (SqlCommand cmd = new SqlCommand("Select ....", con)) //Your SQL Query here
                

                    con.Open();
                    cmd.ExecuteNonQuery();
                    SqlDataReader dr = cmd.ExecuteReader();

                    if (dr != null)
                    
                        while (dr.Read())
                        
                            employee.AdminRights = dr["AdminRights"].ToString(); //This basically reads the SQL column into an "active reader"
                            employee.UserRights = dr["UserRights"].ToString();

                        
                    
              
                

                con.Close();

另一种方法可能是使用variables in SQL 并将它们作为参数添加到Windows 窗体中。 Read this answer

cmd.Parameters.Add(new SqlParameter("@AdminUser", empInfo.AdminUser));
cmd.Parameters.Add(new SqlParameter("@UserRights", empInfo.UserRights));

【讨论】:

如何从 C# 中的数据库中获取最后一个 id

】如何从C#中的数据库中获取最后一个id【英文标题】:HowcanigetthelastidfromthedatabaseinC#【发布时间】:2019-12-2413:10:45【问题描述】:我曾尝试使用SELECT查询从数据库中获取最后一个id,即SELECTLAST_INSERT_idFROMstudentdetails,但它对我不... 查看详情

如何从 DataTable 中获取一列值的列表?

...ataTable?【发布时间】:2014-07-0707:11:45【问题描述】:我有数据表。DataTabledt=newDataTable();dt.Columns.Add(newDataColumn("id",Type.GetType("System.Int32")));dt.Columns.Add(ne 查看详情

从 C# 中的 DataTable 中获取 Distinct Column 以及其他列值

...nC#【发布时间】:2013-12-1610:43:28【问题描述】:我有一个数据表,其中有4个列。Col1、Col2、Col3、Col4。我想过滤DataTable以仅采用不同的Col1值。DataViewdv=MyDa 查看详情

通过 id 从一个表中获取数据并显示在不同的不同页面中

...tdefferentpages【发布时间】:2021-05-1110:44:35【问题描述】:如何从一个表中获取/选择数据。假设,我在数据库中创建了名为“TableA”的表。我为“id”和“post_name”创建了两列。------------------|id|post_name|-- 查看详情

如何通过 C# 中的 Release ID 从 TFS 获取测试结果

】如何通过C#中的ReleaseID从TFS获取测试结果【英文标题】:HowtogettestresultsfromTFSbyReleaseIDinC#【发布时间】:2020-06-2812:25:48【问题描述】:我无法找到在C#中获取给定版本的测试结果的方法。我之前所做的是,通过构建ID获取测试结... 查看详情

获取数据网格列值 - WPF C#

】获取数据网格列值-WPFC#【英文标题】:Getdatagridcolumnvalue-WPFC#【发布时间】:2017-11-1621:26:53【问题描述】:我有一个包含两列的数据网格;好和修井。WPF:<DataGridx:Name="PrintReport1"ItemsSource="BindingTableResults"AutoGenerateColumns="False"Fo... 查看详情

如何从数据库 Blazor C# 中获取 Id 数据

】如何从数据库BlazorC#中获取Id数据【英文标题】:howtoGetbyIddatafromdatabaseBlazorC#【发布时间】:2021-11-0920:36:30【问题描述】:已经开始使用blazor服务器端进行crud从数据库获取数据我现在正在创建一个页面,我将在其中查看详细信... 查看详情

如何通过光标获取android中的时间戳列值?

】如何通过光标获取android中的时间戳列值?【英文标题】:HowtogettheTimestampcolumnvalueinandroidviacursor?【发布时间】:2012-01-2808:30:03【问题描述】:如何通过游标从数据库列中获取时间戳值并将其存储在androidsdk中的时间戳变量中?... 查看详情

如何在数据工厂中获取 CSV 的第一行和第一列值?

】如何在数据工厂中获取CSV的第一行和第一列值?【英文标题】:HowtogetfirstrowandfirstcolumnvalueofCSVinDataFactory?【发布时间】:2020-05-2611:07:46【问题描述】:我们正在使用数据工厂将数据从CSV加载到SQL表中,并且CSV存储在azureblob存储... 查看详情

Laravel - 从数据透视表中获取额外的列值

】Laravel-从数据透视表中获取额外的列值【英文标题】:Laravel-Getadditionalcolumnvaluefrompivottable【发布时间】:2020-06-1211:55:39【问题描述】:我有具有多对多关系的Stores和Medicines表。使用attach和sync可以正常存储和更新。表结构如下... 查看详情

如何通过ID从数据库中获取记录?

】如何通过ID从数据库中获取记录?【英文标题】:HowtofetchrecordfromdbbyID?【发布时间】:2021-11-2709:45:27【问题描述】:我得到了这段代码,但我认为这是不好的方法,如果有100k个结果,它会返回100k个新人怎么办?是否有任何其... 查看详情

如何从 sqlite 游标中获取列值?

】如何从sqlite游标中获取列值?【英文标题】:Howtogetcolumnvaluefromsqlitecursor?【发布时间】:2012-03-1319:10:12【问题描述】:我正在尝试从游标中获取列值,该列是在运行时通过查询内部的计算生成的,我得到了该列的空值,我能够... 查看详情

如何使用 C# 通过他的 ID 获取当前登录的用户?

】如何使用C#通过他的ID获取当前登录的用户?【英文标题】:HowtogetcurrentlyloggedinuserbyhisIDusingC#?【发布时间】:2019-05-0513:40:03【问题描述】:我想编写一个代码,这使得只有当前登录的用户能够只使用他的ID更新DataGridView中的数... 查看详情

如何通过模型关系从三个相关表中获取数据?

】如何通过模型关系从三个相关表中获取数据?【英文标题】:Howtogetdatafromthreerelatedtablewithit\'smodelrelationships?【发布时间】:2021-08-0504:30:34【问题描述】:我有三个这样的表:费用:-expense_iduser_id用户:-user_idemployee_id员工:-emp... 查看详情

如何从 C# 中的 ASPNETDB.NET 表中获取用户 ID?

】如何从C#中的ASPNETDB.NET表中获取用户ID?【英文标题】:HowicangettheuserIDfromthetableASPNETDB.NETinC#?【发布时间】:2012-04-2707:54:17【问题描述】:您好,谁能帮助我如何获取用户的用户ID?如果我写User.Identity.Name我得到用户的名字,如... 查看详情

登录后如何通过用户ID从数据库中获取用户名?

】登录后如何通过用户ID从数据库中获取用户名?【英文标题】:Howtofetchusernamefromdatabasethroughuseridafterlogin?【发布时间】:2019-11-0903:42:27【问题描述】:login_script.php<?phprequire\'common.php\';$email=$_POST[\'e-mail\'];$email=mysqli_real_escape_st... 查看详情

如何从 jQuery 数据表中的 ajax 数据源获取 mRender() 函数中的隐藏列值

】如何从jQuery数据表中的ajax数据源获取mRender()函数中的隐藏列值【英文标题】:HowtogetanhiddencolumnvalueinmRender()functionfromajaxdatasourceinjQuerydatatable【发布时间】:2014-02-2206:24:18【问题描述】:我正在尝试从asp.netmvc5中的ajax源创建一... 查看详情

从 JArray 中获取唯一的列值

】从JArray中获取唯一的列值【英文标题】:FetchUniqueColumnValuesfromaJArray【发布时间】:2021-03-1406:05:17【问题描述】:我试图从JSON响应中仅获取唯一ID。我试图解析并仅选择令牌ID,但它失败了。仅获取ID的最佳和最快方法是什么?... 查看详情