c# - SQL 参数对象类型映射
问题描述
我的代码中出现“不存在映射”错误,应该将记录插入到 SQL Server 表中。我可以说它与我的参数设置有关,但仅此而已。从我的谷歌搜索来看,我的基本代码结构似乎与如何使用 SQL 参数和 C# 一致,但我显然遗漏了一些东西。违规代码的图片如下:
编辑每个反馈,添加代码块:
using (SqlConnection connection = new SqlConnection(ConnHelper.CnnVal("DWTest")))
{
connection.Open();
SqlParameter jsonText = new SqlParameter("@Param1", System.Data.SqlDbType.NVarChar, -1)
{
Value = PostResult
}; //-1 = max
string sqlCMD =
"DECLARE @json NVARCHAR(MAX) " +
" SET @json = N'[ @Param1 ]'" +
"DECLARE @FormattedJson NVARCHAR(MAX) = REPLACE(REPLACE(@json, '{\"success\":1,\"data\":[',''),']}','')" +
"Insert into Staging.CDOPSTest" +
" SELECT * FROM OPENJSON(@FormattedJson) " +
" WITH (" +
"CallFrom char(10) 'strict $.call_from'," +
"Direction BIT '$.direction'," +
"[Hour] INT '$.hour'," +
"[Minute] INT '$.minute'," +
"ReachedServerLevel CHAR(5) '$.reached_service_level'," +
"CallDate NVARCHAR(256) '$.date'," +
"TalkTime INT '$.talk_time'," +
"AnswerSpeed INT '$.speed_to_answer'," +
"DID INT '$.did'," +
"StartTime NVARCHAR(256) '$.start_time'," +
"Endtime NVARCHAR(256) '$.end_time'," +
"ContactID BIGINT '$.contact_id'," +
"AccountType NVARCHAR(256) '$.account_type'" +
")";
SqlCommand cmd = new SqlCommand(sqlCMD, connection);
cmd.Parameters.AddWithValue("Param1", jsonText);
cmd.ExecuteNonQuery();
connection.Close();
}
解决方案
您正试图将一个SqlParameter
作为 SqlParameter 的对象值传递。错误消息的字面意思是它不知道将其转换为什么 SQL 类型。
您似乎正在尝试将字符串作为参数传递,因此您只需要...
cmd.Parameters.Add(jsonText);
而不是...
cmd.Parameters.AddWithValue("Param1", jsonText);
它将 SqlParameter 对象作为参数的值传递。
然后你需要修复你在查询中使用它的方式 - 你正在传递它,@Param1
所以不需要创建@json
参数并尝试通过在字符串中使用文字值来获取它,这不起作用 -你只会得到那个文字字符串,而不是参数的值。
SqlCommand 是 IDisposable 所以应该在一个using
块中。
无需关闭连接,因为它会在退出连接using
块时被隐式 Dispose 关闭。
我建议阅读我们是否可以停止使用 AddWithValue。
推荐阅读
- java - 如何在 Jenkins 结果中不出现错误的情况下处理错误消息
- javascript - 如果 event.target.value 为空则不 appendChild 到 ul 中,如何解决?
- java - 将自定义基本身份验证标头设置为 RestTemplate
- numpy - 为什么将 2 放入 (test_sums == 2).mean()
- sql - 如何在 M:m 表 SQL 中以三种不同的情况显示 id
- php - 如何将 XML 元素从一个文档插入到另一个文档
- python - 如何计算 pyspark 数据框中多个分类列中出现的唯一数据
- javascript - 如何使用 ajax 调用创建动态 html 表
- path - Input_Path_Not_Canonicalized - checkmarx 中的 PathTravesal 漏洞
- reactjs - 在将应用程序推送到存储之前,如何在 app.json 中为 IOS 和 Android 允许 HTTP 流量?