我已将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]]到已知的内置类型 提供商。
答案 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");
我还没有对它进行过测试,但这可以解决您的问题。