将XML标记插入数据库列

时间:2016-04-07 07:04:33

标签: c# sql-server xml

我已将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,Version = 4.0.0.0,Culture = neutral,   PublicKeyToken = b77a5c561934e089]]到已知的内置类型   提供商。

1 个答案:

答案 0 :(得分: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");

我还没有对它进行过测试,但这可以解决您的问题。