【问题标题】:How to use SqlDataReader to retrieve information from database, c#如何使用 SqlDataReader 从数据库中检索信息,c#
【发布时间】:2019-09-05 16:08:57
【问题描述】:

我需要访问我的 SQL 数据库中的一个变量,以及一个已经正确实现的用户名。我使用以下语句查询数据库:

private const string _getUserByUsernameQuery = @"
SELECT
    [User].[username]
FROM
    [User] WITH (NOLOCK) 
    INNER JOIN [Company] WITH (NOLOCK)
    ON [User].[companyId] = [Company].[id]
WHERE
    [User].[username] = @username 
    AND [User].[password] = @password";

然后连接数据库,访问用户名:

using (SqlConnection connection = new SqlConnection(SQLConfiguration.ConnectionString))
{
   SqlCommand command = new SqlCommand(_getUserByUsernameQuery, connection);
   command.Parameters.AddWithValue("@username", username);
   command.Parameters.AddWithValue("@password", password);
   try
   {
      connection.Open();
      using (SqlDataReader reader = command.ExecuteReader())
      {
         if (reader.Read())
         {
            Username = Convert.ToString(reader["username"]);
            //CompanyId = Convert.ToString(reader["companyId"]);
            lblUsername = Username;
            //lblCompanyId = CompanyId;
            Debug.WriteLine("Testing2::");
            Debug.WriteLine(lblUsername);
            //Debug.WriteLine(lblCompanyId);
         }
      }
   }
   catch (Exception)
   {
      if(connection.State == System.Data.ConnectionState.Open)
      connection.Close();
   }
}

在我设置 reader["username"] 等于 Username 的 if 语句中,我使用 debug 输出 Username 并且值是正确的。我在 cmets 中与 CompanyId 相关的内容是我想要做的,但无法做到。这样做不会导致错误,但它会忽略整个语句(即使是其他情况下的用户名变量)。根据我的查询字符串,如何访问变量 companyId?

【问题讨论】:

  • 您的 sql 查询实际上并未选择 Select 列表中的列值 companyId。另请注意,您不需要try catch 块,因为using 将在代码离开块范围后立即关闭连接,无论成功或失败。
  • 感谢尝试捕获信息。此外,compayId 建议似乎也可以解决我的问题。

标签: c# sql sqldatareader


【解决方案1】:

在您的_getUserByUsernameQuery 中,您只选择了username 字段。确保您要从 reader[...] 读取的字段存在于您的 select 语句中。

【讨论】:

  • 这解决了我的问题;接受你的,因为这是第一反应。
【解决方案2】:

看起来您需要将公司 ID 添加到您的选择语句才能检索它:

private const string _getUserByUsernameQuery = @"
SELECT
    [User].[username], [User].[companyId]
FROM
    [User] WITH (NOLOCK) 
    INNER JOIN [Company] WITH (NOLOCK)
    ON [User].[companyId] = [Company].[id]
WHERE
    [User].[username] = @username 
    AND [User].[password] = @password";

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多