c# - 无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,System.Object]”
问题描述
我正在尝试使用 SqlBulkCopy将对象列表插入表中。当代码上线时
var columnNames = ((Dictionary<string, object>)bData[0]).Select(x => x.Key).ToList();'
我有:
'无法将'Newtonsoft.Json.Linq.JObject'类型的对象转换为'System.Collections.Generic.Dictionary`2 [System.String,System.Object]''错误。
你可以帮帮我吗?
public Int64 PostBulkMessage(List<object> bData)
{
DataTable dt = new DataTable();
var columnNames = ((Dictionary<string, object>)bData[0]).Select(x => x.Key).ToList();
for (int i = 0; i < columnNames.Count(); i++)
{
dt.Columns.Add(columnNames[i]);
}
foreach (Dictionary<string, object> customer in bData)
{
DataRow dr = dt.NewRow();
for (int i = 0; i < columnNames.Count(); i++)
{
dr[columnNames[i]] = customer[columnNames[i]];
}
dt.Rows.Add(dr);
}
if (dt.Rows.Count > 0)
{
string consString = ConfigurationManager.ConnectionStrings["ConnEntities"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name.
sqlBulkCopy.DestinationTableName = "dbo.BulkSent";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
}
return 0;
}
解决方案
非常感谢 Stefan 和 Rahul Sharma 的支持。按照 Stefan 的建议,我创建了课程并更改了代码。现在批量插入工作正常。请验证以下代码。
public Int64 PostBulkMessage(List<Bulk> bData)
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(string));
dt.Columns.Add("Mobile", typeof(string));
dt.Columns.Add("MessageContent", typeof(string));
for (int i = 0; i < bData.Count(); i++)
{
DataRow dr = dt.NewRow();
dr[0] = bData[i].Id;
dr[1] = bData[i].Mobile;
dr[2] = bData[i].MessageContent;
dt.Rows.Add(dr);
}
if (dt.Rows.Count > 0)
{
string connectionString = ConfigurationManager.ConnectionStrings["ConnEntities"].ConnectionString;
if (connectionString.ToLower().StartsWith("metadata="))
{
System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder efBuilder = new System.Data.Entity.Core.EntityClient.EntityConnectionStringBuilder(connectionString);
connectionString = efBuilder.ProviderConnectionString;
}
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
sqlBulkCopy.DestinationTableName = "dbo.BulkMsg";
con.Open();
sqlBulkCopy.WriteToServer(dt);
con.Close();
}
}
}
return 0;
}
public class Bulk
{
public string Id { get; set; }
public string Mobile { get; set; }
public string MessageContent { get; set; }
}
推荐阅读
- java - 转换列表
到地图 > 使用 Lambda - swift - 元组比较如何在幕后工作
- excel - 通过 VBA 根据单元格值展开/缩小列
- symfony - ContextListener provider->refreshUser() 为 NULL
- android - 如何使用 UiAutomator2+Appium 从自定义 ListView 中获取文本?
- listview - Flutter上的函数获取Widget时无法在ListView.Builder上显示Widget
- php - 使用 mysqli php 更新选定行中时间列的时间比当前时间短 3 天的所有行
- css - 将鼠标悬停在一个 div 上另一个 div 更改不透明度
- flutter - 所有与编译不同的 AndroidX 版本
- nunjucks - NUNJUKS:For 循环创建变量列表,而是创建字符串