C# 如何使用SqlDataReader读取数据

C# 如何使用SqlDataReader读取数据,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我有一个SQL Server 2008数据库,我正在后端处理它。我正在使用asp.net/C using (SqlCommand StrQuer = new SqlCommand("SELECT * FROM [shopcart].[dbo].[user] WHERE username=@userid AND password=@password", myconn)) { StrQuer.Parameters.AddWithValue("@userid", str_usr); St

我有一个SQL Server 2008数据库,我正在后端处理它。我正在使用asp.net/C

using (SqlCommand StrQuer = new SqlCommand("SELECT *  FROM [shopcart].[dbo].[user] WHERE username=@userid AND password=@password", myconn))
{
   StrQuer.Parameters.AddWithValue("@userid", str_usr);
   StrQuer.Parameters.AddWithValue("@password", str_psd);

   SqlDataReader dr = StrQuer.ExecuteReader();

   if (dr.HasRows)
   {
      // MessageBox.Show("loginSuccess");    
   }
}
我知道读者是有价值的。我的SQL命令是从表中只选择一行。我想一个接一个地阅读阅读器中行中的项目。我该怎么做


谢谢

您可以使用dr.Read inside while loop

while(dr.Read())
{
    string firstCell = dr[0].ToString();
    string secondCell = dr[1].ToString();

    // and so on...
}

// It will be better if you close DataReader
dr.Close();
您可以使用FieldCount属性:

if (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        var value = dr[i];
        // do something
    }
}

下面是sqldatareader的完整示例

 SqlConnection myConnection = new SqlConnection();  
        myConnection.ConnectionString = WebConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;  
        SqlCommand myCommand = new SqlCommand();  
        myCommand.CommandType = CommandType.Text;  
        myCommand.CommandText = "SELECT CategoryID, CategoryName FROM Categories";  
        myCommand.Connection = myConnection;  
        SqlDataReader myReader;  

        try  
        {  
            myConnection.Open();  
            myReader = myCommand.ExecuteReader();  
            while (myReader.Read())  
            {  
                ListItem li = new ListItem();  
                li.Value = myReader["CategoryID"].ToString();  
                li.Text = myReader["CategoryName"].ToString();  
                ListBox1.Items.Add(li);  
            }  
            myReader.Close();  
        }  
        catch (Exception err)  
        {  
            Response.Write("Error: ");  
            Response.Write(err.ToString());  
        }  
        finally  
        {  
            myConnection.Close();  
        }  
显然,您可以将变量和强制转换指定给上述适当的类型


请看一下我的问题,另一个解决方案是将ColumnName所在的数据库返回的列的名称放入begin。如果是字符串,则可以使用.ToString。如果它是另一种类型,则需要使用System.convert对其进行转换

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string column = rdr["ColumnName"].ToString();
int columnValue = Convert.ToInt32(rdr["ColumnName"]);
}

您可以使用dr.Read inside while loop。像这样:

while(dr.read())
{
    // MessageBox.Show("loginSuccess");    
}

简单地使用dr[columnname]这种类型的问题,我不认为应该在这里得到答案,这是一个很糟糕的例子。这里有不少于3个IDisposable资源,您不处理任何资源。请阅读使用说明书。
while(dr.read())
{
    // MessageBox.Show("loginSuccess");    
}