SqlCommand asp.net C#

本文关键字:net asp SqlCommand | 更新日期: 2023-09-27 18:00:06

你能帮我解决我的问题吗?我正试图创建一个函数,在下拉列表上输出数据。设置我的参数,我的代码如下:

        public static List<string> GetTracks(out List<string> trackIds, string conferenceId)
    {
        var res = new List<string>();
        trackIds = new List<string>();
        var sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("select Track_name,Track_ID from TrackCommittee where Conference_id= @conferenceId", sqlCon);
        DataSet ds = new DataSet();
        cmd.Connection.Open();
        cmd.Parameters.Add(new SqlParameter("@conferenceId", conferenceId));

        using (SqlDataReader sdr = cmd.ExecuteReader())
        {
       while (sdr.Read())
       {
        res.Add(sdr.GetString(sdr.GetOrdinal("Track_name")));
        trackIds.Add(sdr.GetInt32(sdr.GetOrdinal("Track_ID")).ToString());
       }
               }

        cmd.Connection.Close();
        cmd.Dispose();
        return res;
    }

提前感谢

SqlCommand asp.net C#

像这样重写整个函数:

public static IEnumerable<ListItem> GetTracks(string conferenceId)
{
    using (var sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
    using (var cmd = new SqlCommand("select Track_name,Track_ID from TrackCommittee where Conference_id= @conferenceId", sqlCon))
    {
        cmd.Parameters.Add("@conferenceId", SqlDbType.Int).Value = conferenceId;
        sqlCon.Open();
        using (SqlDataReader sdr = cmd.ExecuteReader())
        {
            while (sdr.Read())
            {
                yield return new ListItem(sdr[0].ToString(), sdr[1].ToString());
            }
        }
    }
}

并更新您的呼叫代码如下:

if (string.IsNullOrEmpty(os.SelectedValue)) 
{
    os.Items.AddRange(GetTracks("all").ToArray());
}

为了更好地分离呈现层和数据层,我会修改GetTracks以返回KeyValuePairs,并调用将KeyValuePair的select投影添加到ListItem。

您从未实际接触过结果集sdr:

 using (var sqlCon  = new SqlConnection(...))
 { 
    sqlCon.Open();
    using (SqlCommand cmd = new SqlCommand("...", sqlCon)
    {
        cmd.Parameters.Add(new SqlParameter("@conferenceId", conferenceId));
        using (SqlDataReader sdr = cmd.ExecuteReader())
        {
            while (sdr.Read())
            {
                res.Add(sdr[0]);
                trackIds.Add (srd[1]);
            }
        }
    }
  }
  return res;

我不确定此处数据集的用途。这是我过去使用过的那种语法。(我认为语法是正确的-我这里没有我的代码)

using (SqlDataReader sdr = cmd.ExecuteReader())
{
  while (sdr.Read())
  {
    res.Add(sdr.GetString(sdr.GetOrdinal("Track_name")));
    trackIds.Add(sdr.GetInt32(sdr.GetOrdinal("Track_ID")).ToString())
  }
}

编辑:如注释中所述,在SqlConnection周围使用一个,以节省您自己关闭/处置它的时间。

您似乎没有使用SqlDataReader执行任何操作。通常你会有这样的东西:

using (SqlDataReader sdr = cmd.ExecuteReader())
{
   while(sdr.Read())
   {
      //whatever
   }
...

现在,看起来您正在执行命令,但对结果什么也不做。我也不确定DataTable是如何发挥作用的。