-4

我有一个 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 命令是从表中只选择 1 行。我想在阅读器中逐一阅读该行中的项目。我该怎么做呢?

谢谢

4

6 回答 6

2

您可以使用该FieldCount属性:

if (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        var value = dr[i];
        // do something
    }
}
于 2013-08-01T10:57:38.567 回答
1

您可以在 while 循环中使用 dr.Read() 。

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();
于 2013-08-01T10:57:27.013 回答
1
if (dr.HasRows)
{
    dr["NameOfColumn"].ToString();    
}

您显然分配了变量并转换为上面的适当类型。

在这里也看看我的问题,另一种解决方案将 Ado.net DataReader 转换为 IDataRecord 给出奇怪的结果

于 2013-08-01T10:59:05.637 回答
1

您可以dr.Read()在 while 循环中使用。像这样 :

while(dr.read())
{
    // MessageBox.Show("loginSuccess");    
}
于 2013-08-01T11:03:13.010 回答
0

这是 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();  
        }  
于 2013-08-01T10:59:01.700 回答
0

把从数据库返回的列名放在“ColumnName”所在的位置。如果是字符串,可以使用 .ToString()。如果是其他类型,则需要使用 System.Convert 进行转换。

SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
string column = rdr["ColumnName"].ToString();
int columnValue = Convert.ToInt32(rdr["ColumnName"]);
}
于 2013-08-01T11:02:27.780 回答