1

我有一个用 C# 完成的 asp.net 项目(我的 C# 语法非常生疏),并且正在使用它在项目中创建的内置数据库。我创建了一个名为 aspnet_Tutorials 的表,它(目前)存储两列用户提交的数据:TutorialName 和 TutorialContent。很简单,这是一个学习项目。

我需要做的是从 aspnet_Tutorials 的第一列创建一个列表,以使用它在页面上创建教程的“目录”。我遇到问题的部分(主要是语法上的)是连接并遍历列以将值放入列表中。任何人都可以提供一个直接的例子吗?并可能解释代码中发生了什么。

public class TutorialsDirDAL
    {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();


        public List<string> DisplayTutorials() //parameters? String qry?
        {
           //query the database table, foreach loop over the data, place it into a list?
        }
    }

我知道如何编写简单的 sql 查询。但是我在我的谷歌搜索中看到了一些不同的设置。我目前有以下查询,请随意将其分开或提供比使用查询更好的解决方案。

cmd.CommandText = "SELECT * FROM ASPNET_TUTORIALS (TutorialTitle)"
                + "VALUES (@tutorialTitle)";

谢谢!

4

2 回答 2

3

那么您可以使用数据读取器获取并映射到对象。我可以给你一些粗略的代码,可能是这样的:

            using (IDataReader objDataReader = objDB.ExecuteReader(objCMD))
            {
                while (objDataReader.Read())
                {
                    DataBaseObject obj = new DataBaseObject();
                    obj = MapObjectToList(objDataReader);
                    ObjectList.Add(obj);

                }
                objDataReader.Dispose();
            }

// 映射函数可以像这样调用:

private DataBaseObject MapObjectToList(IDataReader objDataReader)
{
    DataBaseObject obj = new DataBaseObject();
    obj.Prop1Name = base.GetDataValue<string>(objDataReader, "Column1Name");
    obj.Prop2Name = base.GetDataValue<string>(objDataReader, "Column2Name");
    return obj;
}

但这只是我将如何做的一个粗略的想法。

于 2012-07-10T13:46:32.587 回答
3

ebad86 的回答是可以接受的,但由于您显然正在学习,我认为引入 OO 原则会使您在这一点上尝试学习的内容变得混乱。

这是一个基本的方法:

private void GetData()
{
   //The object that will physically connect to the database
   using(SqlConnection cnx = new SqlConnection("<your connection string>")
   {
            //The SQL you want to execute
           SqlCommand cmd = new SqlCommand("SELECT * FROM ASPNET_TUTORIALS");
           //Open the connection to the database
           cnx.Open();
           //execute your command
           using (IDataReader dataReader = cnx.ExecuteReader(cmd))
           {
             //Loop through your results
             while(dataReader.Read())
             {
                //do whatever to the data
                ListItem item = new ListItem(Convert.ToString(dataReader["TutorialName"])); 
                lst.Items.Add(item);
             }
           }
   }
}

这一切都非常简单。不过,您最感兴趣的部分是 while 循环。循环将遍历所有返回的记录,您可以对它们做任何您需要做的事情。在我的示例中,我假设有一个名为“lst”的 ListBox,我只是将 ListItems 添加到其中,它的名称将是任何“TutorialName”的名称。此时,您可以从字面上对数据做任何您需要做的事情。为了适合您的示例(返回列表),您可以这样做:

private List<string> GetData()
{
   List<string> lst = new List<string>();
   //The object that will physically connect to the database
   using(SqlConnection cnx = new SqlConnection("<your connection string>")
   {
            //The SQL you want to execute
           SqlCommand cmd = new SqlCommand("SELECT * FROM ASPNET_TUTORIALS");
           //Open the connection to the database
           cnx.Open();
           //execute your command
           using (IDataReader dataReader = cnx.ExecuteReader(cmd))
           {
             //Loop through your results
             while(dataReader.Read())
             {
                lst.Add(Convert.ToString(dataReader["TutorialName"]));
             }
           }
   }
   return lst;
}

如果您有任何问题,请回复。

于 2012-07-10T14:05:52.903 回答