【问题标题】:How can insert data to database from arraylist in C#如何在C#中从arraylist向数据库插入数据
【发布时间】:2020-10-03 21:05:55
【问题描述】:

我的班级是“学生”。我已经完成了 xml 解析,然后我使用这个类将 xml 元素记录到了 arraylist。然后我想将 arraylist 中的元素插入到数据库中。我该怎么做?

            int id=1;
            Arraylist arylist=new Arraylist();
            xmlparse.Load(Url);
            XmlNodeList nodes = xmlparse.SelectNodes("...");//Url nodes

            foreach (XmlNode item in nodes)
            {
                XmlNode innode = item.SelectSingleNode("name");

                string xml_name = innode != null ? innode.InnerText : "";

                innode = item.SelectSingleNode("parts");
                string xml_parts = innode != null ? innode.InnerText : "";

...

                arylist.Add(new Student(id, xml_name, xml_parts...));
                id++;

            }

我尝试过这样的事情。但我不能完全做到。有没有人可以帮助我

   foreach (int i in arylist)
            {
                var mycommand = new OleDbCommand("insert into Student (name,parts) values (@name,@parts)", connection);
                mycommand.Parameters.AddWithValue("@name",i dont know what i should write here);
            }

【问题讨论】:

  • 如果您将ArrayList 更改为List<Student>,那么在您的foreach 中您可以使用Student 而不是int,然后您可以访问您的属性以添加参数值。
  • 你为什么使用ArrayList?由于您正在收集Student,我建议您改用List<Student>
  • 使用Arraylist有没有解决办法?
  • 您可以将 ArrayList 项转换回 Student,但我也会告诉您不要使用 ArrayLIst。从 c# 2.0 开始就没有理由使用它

标签: c# sql arraylist


【解决方案1】:

您的代码需要如下所示:

using(mycommand = new OleDbCommand("insert into Student (name,parts) values (@name,@parts)", connection)){

  mycommand.Parameters.AddWithValue("@name","dummy name");
  mycommand.Parameters.AddWithValue("@parts","dummy part"); //assuming parts is a string - you haven't made any code to parse it

  foreach (object o in arylist)
  {
    Student s = (Student)o; //this isn't needed if you use a List<Student>..

    mycommand.Parameters["@name"].Value = s.Name; //or whatever your name property is
    mycommand.Parameters["@parts"].Value = s.Parts; //or whatever your parts property is

    mycommand.ExecuteNonQuery();
  }
}

我们将所有学生都放在一个 ArrayList 中(不是最佳选择;但每个人都坚持告诉你这一点,所以我不会重复他们的话)所以我们应该:

  • 创建一个带有连接的命令(我假设你在其他地方Open()ed 它)。我们在 using 块中执行此操作,因此 c# 将在我们之后进行清理 - 对 DB 的东西总是很好。请记住对您的连接执行相同的操作
  • 在命令中添加一些虚拟参数 - 我们将在一分钟内输入真实值
  • 开始循环遍历数组列表,一次拉出一个学生
    • .. 将其从对象转换为学生,以便更容易使用,然后
    • .. 把学生的价值观放进去,然后
    • .. 执行查询

阅读此内容,以指导您未来的编码:https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

如果 AddWithValue 用于不在 WHERE 子句中的参数,我个人不会有太多问题,但您至少应该了解它的作用以及它可能导致的麻烦

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多