如何使用SqlDataReader从数据库中检索信息,c#

时间:2013-01-02 16:37:09

标签: c# sql sqldatareader

我很想和c#和SQL一起工作,所以我和我一起工作..

我需要访问我的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();
   }
}

在if语句中,我将reader [“username”]设置为Username,我使用debug输出Username,值正确。我在有关CompanyId的评论中所拥有的是我想要做的,但却无法做到。这样做不会导致错误,但它会忽略整个语句(即使是其他工作的Username变量)。根据我的查询字符串,我如何访问变量companyId?

顺便说一句,我正在使用我最初没有开发的代码,所以查询的任何样式问题都不是我的选择,也不一定会改变。

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

您似乎需要在select语句中添加公司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";