【问题标题】:Inserting XML-tags into database columns将 XML 标记插入数据库列
【发布时间】:2016-04-07 07:04:32
【问题描述】:

我已将 XML 反序列化为类,它可以正常工作。它返回每个 XML 标记的列表

例如,打印名称标签的所有值:

   var First = deserializedList.Select(item => item.Personpost.Namn.Fornamn).ToList();
                foreach (var o in First)
                {  
                    Console.WriteLine("Namn: " + o); 
                }

现在我想知道是否可以将该对象作为列插入到数据库表中?

这样的?

string connetionString = null;
            SqlConnection connection;
            SqlCommand command;
            SqlDataAdapter adpter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            XmlReader xmlFile;
            string sql = null;


            connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=*****;Password=*****";

            connection = new SqlConnection(connetionString);

            xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
            ds.ReadXml(xmlFile);


            connection.Open();



            SqlCommand command1 = new SqlCommand("INSERT INTO Seamen(FirstName) values(@FirstName)", connection);
            command1.Parameters.AddWithValue("@FirstName", First);

            command1.ExecuteNonQuery();

            connection.Close();
            Console.WriteLine("Done");

我试过了,但是出错了:

没有来自对象类型 System.Collections.Generic.List`1 的映射 [[System.String,mscorlib,版本 = 4.0.0.0,文化 = 中性, PublicKeyToken = b77a5c561934e089]] 到已知的内置类型 提供者。

【问题讨论】:

    标签: c# sql-server xml


    【解决方案1】:

    您不能将List<string> 作为命令参数传递。 如果您想插入该列表中的所有值,您应该遍历 First 列表中的所有项目(类似于您在第一个示例中所做的)并插入值。

    你的代码的c/p:

    xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
    
    
    ds.ReadXml(xmlFile);
    
    
    connection.Open();
    
    SqlCommand command1 = new SqlCommand("INSERT INTO Seamen(FirstName) values(@FirstName)", connection);
    
    foreach (var name in First)
    {
        command1.Parameters.Clear();
        command1.Parameters.AddWithValue("@FirstName", name);
    
        command1.ExecuteNonQuery();
    }
    
    connection.Close();
    Console.WriteLine("Done");
    

    我还没有测试过,但这应该可以解决你的问题。

    【讨论】:

    • 谢谢,但是如果我想同时插入多个列怎么办?有没有办法循环该循环中的每一列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2012-12-20
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多