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;
}
提前感谢
像这样重写整个函数:
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是如何发挥作用的。