列表框中的每个项 |SqlReader.

本文关键字:SqlReader 列表 | 更新日期: 2023-09-27 18:35:18

我在这里要做的是选择连接的人,但我真的不知道该怎么做。我在列表框中有x个名字。我想检查登录和注销时间的每个名称,如果登录大于注销时间,它会在ListBox上键入名称"已连接","未连接"。提前谢谢你.

foreach (var Item in listBoxControl2.Items)
{
    try
    {
        SqlConnection sqlConnection = new SqlConnection(ConnectDatabase);
        SqlCommand sqlCommand = new SqlCommand();
        sqlCommand.Connection = sqlConnection;
        sqlCommand.CommandText = "Select login_time_value,logout_time_value ConnectionTime.dbo.Avalaible where name = '" + Item.ToString() +"'";
        sqlConnection.Open();
        SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
        while (true)
        {
            bool flag = sqlDataReader.Read();
            if (!flag)
            {
                break;
            }
            DateTime login = sqlDataReader.GetDateTime(0);
            DateTime logout = sqlDataReader.GetDateTime(1);
            if (login > logout)
            {
            }
            else
            {
            }
        }
        sqlDataReader.Close();
        sqlConnection.Close();
    }
    catch
    {
    }
}

列表框中的每个项 |SqlReader.

代码中有很多东西可以更改,但为了回答您的问题,我会将循环更改为使用简单的 for 循环,以便您可以直接访问 listBox 中的项并更改匹配项的文本。

for(x = 0; x < listBoxControl2.Items.Count; x++)
{
    while(sqlDataReader.Read())
    {
        DateTime login = sqlDataReader.GetDateTime(0);
        DateTime logout = sqlDataReader.GetDateTime(1);
        if (login > logout)
        {
            listBoxControl2.Items[x] = listBoxControl2.Items[x] + " connected";
        }
        else
        {
            listBoxControl2.Items[x] = listBoxControl2.Items[x] + " logged off";
        }
    }
}

foreach 的问题在于你得到了字符串文本的副本,你必须替换原始文本,这更容易用 for 循环。

关于其他问题。

  • 命令文本中的 FROM 子句在哪里?
  • 将连接的开口移到环路外。
  • 使用
  • using 语句打开/使用/关闭/处置一次性物品对象(为什么?
  • 在生成要传递给数据库引擎(为什么?

所以更新的代码可能是

string cmdText = "Select login_time_value,logout_time_value ConnectionTime.dbo.Avalaible " + 
                 "FROM ??????????" + 
                 "where name = @name";
using(SqlConnection sqlConnection = new SqlConnection(ConnectDatabase))
using(SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection))
{
    sqlCommand.Parameters.AddWithValue("@name", "dummy");
    sqlConnection.Open();
    for(x = 0; x < listBoxControl2.Items.Count; x++)
    {
         string name = listBoxControl2.Items[x].ToString();
         sqlCommand.Parameters["@name"].Value = name;
         using(SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
         {
             while(sqlDataReader.Read())
             {
                DateTime login = sqlDataReader.GetDateTime(0);
                DateTime logout = sqlDataReader.GetDateTime(1);
                if (login > logout)
                {
                    listBoxControl2.Items[x] = name + " connected";
                }
            }
         }
    }
}