ListBox中的foreach项目SQLReader的

时间:2013-10-14 10:24:35

标签: c# sql listbox

我在这里尝试做的是选择关联的人, 但我真的不知道该怎么做。我在列表框上有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
    {
    }
}

1 个答案:

答案 0 :(得分:1)

你的代码中有很多东西可以改变,但是为了回答你的问题,我会改变循环使用一个简单的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语句打开/使用/关闭/处置一次性用品 对象(Why?
  • 构建命令文本以传递给参数化查询时使用参数化查询 数据库引擎(Why?

因此更新的代码可能是

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";
                }
            }
         }
    }
}