使用 dapper 将 JObject 列表插入 SQL 服务器
Insert JObject list to SQL Server with dapper
我需要将 JObject
的结果插入 SQL Database
。但是它一直说我不允许插入数组,列表?
我做错了什么?
这是我目前得到的:
JArray jsonArray = JArray.Parse(sb.ToString());
var jsonObjects = jsonArray.OfType<JObject>().ToList();
using (SqlConnection connection = new SqlConnection(connectionstring))
{
connection.Open();
connection.Execute(@"Insert into dbo.JsonMeta values(@meta)", jsonObjects);
}
jsonObjects 的结果:
Count: 57000 rows
row[0]
看起来像这样:
{{
"ID": "asdasdasdasdIndenlandsk",
"FLYTTEDATO": "01/02/2020",
"FLYTTE_TIDSPUNKT": "1000",
"R�KKEF�LGE_FLYTNING": null,
"FRA_CHR": "asdasdasdasd",
"TIL_CHR": "asdasdasd",
"ANTAL": "asdasdasdasd",
"ANTAL_CONTAINERE": null,
"INDBERETTER_LOGON": "asdasdasd:assdaasdasd",
"BIL_ANVENDELSE": "FORVOGN",
"REGISTRERINGSNUMMER FORVOGN": "XXXXXX",
"BIL_NATIONALITET FORVOGN": "XXXXX",
"FRAFLYT_NATION": null,
"TILFLYT_NATION": null,
"REGISTRERINGSNUMMER H�NGER": null,
"BIL_NATIONALITET H�NGER": null,
"REGISTRERINGSNUMMER OML�SSER FORVOGN": null,
"BIL_NATIONALITET OML�SSER FORVOGN": null,
"REGISTRERINGSNUMMER OML�SSER H�NGER": null,
"BIL_NATIONALITET OML�SSER H�NGER": null,
"TRACES DOKNR": null,
"SLETMARKERING": "0",
"DATO_OPRET": "2020-06-02 08:33:54",
"BESNR_AFSENDER": "asdasdasdasdasd",
"BESNR_MODTAGER": "asdasdasd",
"BRUGER_AFSENDER_CVR_NR": "sdfsdf324234",
"BRUGER_AFSENDER_NAVN": "asdasdasdasd",
"BRUGER_AFSENDER_ADRESSE": "asdasdasdasd",
"BRUGER_AFSENDER_BYNAVN": "adsasdasd",
"BRUGER_AFSENDER_POSTNR": "adsasdasd",
"BRUGER_AFSENDER_POSTDISTRIKT": "adsasdasd",
"BRUGER_AFSENDER_REKLAMEBESKYTTET": null,
"BRUGER_MODTAGER_CVR_NR": "adasdasdasd",
"BRUGER_MODTAGER_NAVN": "asdasdasdasd",
"BRUGER_MODTAGER_ADRESSE": "adasdasd",
"BRUGER_MODTAGER_BYNAVN": "asdasdasd",
"BRUGER_MODTAGER_POSTNR": "adasdasd",
"BRUGER_MODTAGER_POSTDISTRIKT": "asdasdasd",
"BRUGER_MODTAGER_REKLAMEBESKYTTET": null,
"BESSTR_SOER": "0",
"BESSTR_SLAGTESVIN": "asdasdasdasdasd",
"BESSTR_SMAAGRISE": "0",
"ANTAL_SLAGTESVIN_DAKA": null,
"ANTAL_SOER_DAKA": null,
"PRAKSIS_NR": "asdasdasd",
"PRAKSIS_NAVN": "asdasdasdasdasd",
"PRAKSIS_ADRESSE": "asdasdasdasdasd",
"PRAKSIS_BYNAVN": null,
"PRAKSIS_POSTNR": "asdasdasd",
"PRAKSIS_POSTDISTRIKT": "asdasdasdasdasd"
}}
错误:
Exception Type: System.InvalidOperationException
TargetSite: CacheInfo GetCacheInfo(Identity, System.Object, Boolean)
Message: An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context
Data: System.Collections.ListDictionaryInternal
HelpLink: NULL
Source: Dapper
HResult: -2146233079
这个问题可能需要更多的上下文,目前我们不知道你的数据库是什么或是什么样子。
例如,您是否正在使用 MySQL 并尝试仅将 JSON 存储为字符串?
或者您是否试图将 JSON 对象存储到具有相同列数的 table 中?
JArray jsonArray = JArray.Parse(sb.ToString());
var sb = new StringBuild("Insert into dbo.JsonMeta values");
for(int i =0; i < jsonArray.Length; i++)
{
sb.AppendLine($"(@meta{i}),");
}
using (SqlConnection connection = new SqlConnection(connectionstring))
{
connection.Open();
connection.Execute(sb.ToString().TrimEnd(','), jsonArray.OfType<JObject>().Select(item => item.ToStirng()).ToArray());
}
Dapper.Contrib 支持插入项目列表。
connection.Insert(jsonObjects);
当然,您必须提供适当的 DTO。我不确定 JObject
是否符合条件。
我需要将 JObject
的结果插入 SQL Database
。但是它一直说我不允许插入数组,列表?
我做错了什么?
这是我目前得到的:
JArray jsonArray = JArray.Parse(sb.ToString());
var jsonObjects = jsonArray.OfType<JObject>().ToList();
using (SqlConnection connection = new SqlConnection(connectionstring))
{
connection.Open();
connection.Execute(@"Insert into dbo.JsonMeta values(@meta)", jsonObjects);
}
jsonObjects 的结果:
Count: 57000 rows
row[0]
看起来像这样:
{{
"ID": "asdasdasdasdIndenlandsk",
"FLYTTEDATO": "01/02/2020",
"FLYTTE_TIDSPUNKT": "1000",
"R�KKEF�LGE_FLYTNING": null,
"FRA_CHR": "asdasdasdasd",
"TIL_CHR": "asdasdasd",
"ANTAL": "asdasdasdasd",
"ANTAL_CONTAINERE": null,
"INDBERETTER_LOGON": "asdasdasd:assdaasdasd",
"BIL_ANVENDELSE": "FORVOGN",
"REGISTRERINGSNUMMER FORVOGN": "XXXXXX",
"BIL_NATIONALITET FORVOGN": "XXXXX",
"FRAFLYT_NATION": null,
"TILFLYT_NATION": null,
"REGISTRERINGSNUMMER H�NGER": null,
"BIL_NATIONALITET H�NGER": null,
"REGISTRERINGSNUMMER OML�SSER FORVOGN": null,
"BIL_NATIONALITET OML�SSER FORVOGN": null,
"REGISTRERINGSNUMMER OML�SSER H�NGER": null,
"BIL_NATIONALITET OML�SSER H�NGER": null,
"TRACES DOKNR": null,
"SLETMARKERING": "0",
"DATO_OPRET": "2020-06-02 08:33:54",
"BESNR_AFSENDER": "asdasdasdasdasd",
"BESNR_MODTAGER": "asdasdasd",
"BRUGER_AFSENDER_CVR_NR": "sdfsdf324234",
"BRUGER_AFSENDER_NAVN": "asdasdasdasd",
"BRUGER_AFSENDER_ADRESSE": "asdasdasdasd",
"BRUGER_AFSENDER_BYNAVN": "adsasdasd",
"BRUGER_AFSENDER_POSTNR": "adsasdasd",
"BRUGER_AFSENDER_POSTDISTRIKT": "adsasdasd",
"BRUGER_AFSENDER_REKLAMEBESKYTTET": null,
"BRUGER_MODTAGER_CVR_NR": "adasdasdasd",
"BRUGER_MODTAGER_NAVN": "asdasdasdasd",
"BRUGER_MODTAGER_ADRESSE": "adasdasd",
"BRUGER_MODTAGER_BYNAVN": "asdasdasd",
"BRUGER_MODTAGER_POSTNR": "adasdasd",
"BRUGER_MODTAGER_POSTDISTRIKT": "asdasdasd",
"BRUGER_MODTAGER_REKLAMEBESKYTTET": null,
"BESSTR_SOER": "0",
"BESSTR_SLAGTESVIN": "asdasdasdasdasd",
"BESSTR_SMAAGRISE": "0",
"ANTAL_SLAGTESVIN_DAKA": null,
"ANTAL_SOER_DAKA": null,
"PRAKSIS_NR": "asdasdasd",
"PRAKSIS_NAVN": "asdasdasdasdasd",
"PRAKSIS_ADRESSE": "asdasdasdasdasd",
"PRAKSIS_BYNAVN": null,
"PRAKSIS_POSTNR": "asdasdasd",
"PRAKSIS_POSTDISTRIKT": "asdasdasdasdasd"
}}
错误:
Exception Type: System.InvalidOperationException
TargetSite: CacheInfo GetCacheInfo(Identity, System.Object, Boolean)
Message: An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context
Data: System.Collections.ListDictionaryInternal
HelpLink: NULL
Source: Dapper
HResult: -2146233079
这个问题可能需要更多的上下文,目前我们不知道你的数据库是什么或是什么样子。
例如,您是否正在使用 MySQL 并尝试仅将 JSON 存储为字符串? 或者您是否试图将 JSON 对象存储到具有相同列数的 table 中?
JArray jsonArray = JArray.Parse(sb.ToString());
var sb = new StringBuild("Insert into dbo.JsonMeta values");
for(int i =0; i < jsonArray.Length; i++)
{
sb.AppendLine($"(@meta{i}),");
}
using (SqlConnection connection = new SqlConnection(connectionstring))
{
connection.Open();
connection.Execute(sb.ToString().TrimEnd(','), jsonArray.OfType<JObject>().Select(item => item.ToStirng()).ToArray());
}
Dapper.Contrib 支持插入项目列表。
connection.Insert(jsonObjects);
当然,您必须提供适当的 DTO。我不确定 JObject
是否符合条件。