【问题标题】:reading from SQL doesn't put value in string list [closed]从 SQL 读取不会将值放入字符串列表 [关闭]
【发布时间】:2018-05-22 18:02:48
【问题描述】:

我正在尝试在字符串列表中添加来自 sql 的数据,但它一直说我的字符串列表 = null。

按钮上的代码:

    protected void Button2_Click(object sender, EventArgs e)
        {
            // go back to the menu
        }
        protected void Button3_Click(object sender, EventArgs e)
        {
            // code to display the books by sanctuary
            ListBox1.Items.Clear();
            List<String> s = DBConnectivity.LoadBooksBySanctuary2(3/*int.Parse(DDSanctuary.SelectedValue)*/);

            foreach (var detail in s)
            {
               ListBox1.Items.Add(detail);
            }




        }

从 SQL 读取并放入字符串列表的代码。我知道我的连接很好,因为我可以添加宠物

 public static List<String> LoadPetsBySanctuary2(int sID)
        {
            List<String> saName = new List<String>();
            SqlConnection myConnection = GetConnection();
            // string myQuery = "SELECT  Name, categId, cName FROM Book, Category WHERE Book.CategID=Category.ID AND Book.authorId = " + sID;

            string myQuery = "SELECT  Name  FROM pet WHERE sanID = " + saName;

            SqlCommand myCommand = new SqlCommand(myQuery, myConnection);

            try
            {
                myConnection.Open();
                SqlDataReader myReader = myCommand.ExecuteReader();

                while (myReader.Read())
                {
                 //   saName.Add(myReader["Name"].ToString());

                    saName.Add(myReader["Name"].ToString());

                }
                return saName;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception in DBHandler", ex);
                return null;
            }
            finally
            {
                myConnection.Close();
            }
        }

【问题讨论】:

  • this: DBConnectivity.LoadBooksBySanctuary2(3/*int.Parse(DDSanctuary.SelectedValue)*/); 可能不会返回 List&lt;string&gt;(所以可能为 null)并且没有 EMERGENCY ok...
  • but it keeps saynig that my string list = null. 正是上面所说的吗?它具体说了什么?是什么原因造成的(即哪一行)?
  • 您将 saName 而不是 sID 参数传递给您的查询。异常应该告诉您您的查询已损坏。
  • 这将是学习使用调试器、单步调试代码并准确查看发生了什么的最佳时机。当您向我们展示LoadPetsBySanctuary2 的代码时,我们也无法告诉您LoadBooksBySanctuary2 有什么问题。书不是宠物,除非你的社会与我的社会大不相同。

标签: c# sql null


【解决方案1】:

如果列表返回为null,那么您正在点击catch(Exception ex) 块。那是唯一返回 null 的地方。提示:停止吞咽异常。异常会告诉你问题是什么。

另外:使用 参数 - 永远不要像这样附加输入。

您可能打算使用sId 而不是saName

我可以在这里谦虚地推荐一些“Dapper”:

public static List<String> LoadPetsBySanctuary2(int sID)
{
    return GetConnection().Query<string>(
        "SELECT  Name  FROM pet WHERE sanID = @sID",
        new { sID }).AsList();
}

注意:尚不清楚GetConnection 是否传递了连接的所有权;如果是,你应该使用using:

public static List<String> LoadPetsBySanctuary2(int sID)
{
    using(var myConnection = GetConnection())
    {
        return myConnection.Query<string>(
            "SELECT  Name  FROM pet WHERE sanID = @sID",
            new { sID }).AsList();
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    相关资源
    最近更新 更多