c# - 在 .NET Core 3 中执行 SqlRaw 参数查询
问题描述
我正在尝试在 C# 中执行参数查询,代码是这样的:
string sql = @"INSERT INTO [dbo].[ShoppingListShop] " +
"([PlaceId], " +
"[Name], " +
"[Address], " +
"[Location], " +
"[NorthEast], " +
"[SouthWest], " +
"[Date], " +
"[LocationLat], " +
"[LocationLng], " +
"[NorthEastLat], " +
"[NorthEastLng], " +
"[SouthWestLat], " +
"[SouthWestLng])" +
"VALUES(" +
"@placeId, " +
"@name, " +
"@address, " +
"GEOGRAPHY::Point(@lat, @lng, 4326), " +
"GEOGRAPHY::Point(@nelat, @nelng, 4326), " +
"GEOGRAPHY::Point(@swlat, @swlng, 4326), " +
"SYSDATETIMEOFFSET(), " +
"@lat, " +
"@lng, " +
"@nelat, " +
"@nelng, " +
"@swlat, " +
"@swlng);";
SqlParameter placeIdPrm = new SqlParameter("@placeId", SqlDbType.NVarChar);
SqlParameter namePrm = new SqlParameter("@name", SqlDbType.NVarChar);
SqlParameter addressPrm = new SqlParameter("@address", SqlDbType.NVarChar);
SqlParameter latPrm = new SqlParameter("@lat", SqlDbType.Decimal, 18);
SqlParameter lngPrm = new SqlParameter("@lng", SqlDbType.Decimal, 18);
SqlParameter neLatPrm = new SqlParameter("@nelat", SqlDbType.Decimal, 18);
SqlParameter neLngPrm = new SqlParameter("@nelng", SqlDbType.Decimal, 18);
SqlParameter swLatPrm = new SqlParameter("@swlat", SqlDbType.Decimal, 18);
SqlParameter swLngPrm = new SqlParameter("@swlng", SqlDbType.Decimal, 18);
placeIdPrm.Value = shop.PlaceId;
namePrm.Value = shop.Name;
addressPrm.Value = shop.Address;
latPrm.Value = shop.LocationLat;
lngPrm.Value = shop.LocationLng;
neLatPrm.Value = shop.NorthEastLat;
neLngPrm.Value = shop.NorthEastLng;
swLatPrm.Value = shop.SouthWestLat;
swLngPrm.Value = shop.SouthWestLng;
SqlParameter[] parametri = new SqlParameter[9] { placeIdPrm, namePrm, addressPrm, latPrm, lngPrm, neLatPrm, neLngPrm, swLatPrm, swLngPrm };
sqlServerDbContext.Database.ExecuteSqlRaw(sql, parametri);
出于某种原因,我得到了这个例外
SqlParameterCollection 只接受非空的 SqlParameter 类型对象,不接受 SqlParameter 对象。
我究竟做错了什么?
解决方案
这是根据错误消息在黑暗中拍摄的,但是:您是否有可能同时使用System.Data.SqlClient
和Microsoft.Data.SqlClient
?即sqlServerDbContext.Database.ExecuteSqlRaw
期待一个System.Data.SqlClient.SqlParameter[]
(和实例),而你给了它一个Microsoft.Data.SqlClient.SqlParameter[]
(和实例)?(反之亦然) - 尝试“去定义” SqlParameter
,看看它来自哪里。
推荐阅读
- performance - 卡夫卡消费者滞后与fluntd
- r - Adding text on each bar in horizontal bar plot in ggplot
- google-sheets - 如何在 Google 表格中批量编辑条件格式规则?
- pytorch - 我可以在 Seldon 上部署 PyTorch 训练的模型吗?
- python - 无法在 Pycharm 中和通过苹果 m1 上的 cli 安装包 scikit-learn
- r - 如何将具有多列的数据框从宽转换为长
- local-storage - 关闭浏览器/选项卡时需要清除 localStorage,刷新选项卡时不需要
- python - 如何从列表中删除方括号和撇号
- java - 分离数据之间的分页
- javascript - 即使值为 false 也会执行带有 if 的 JavaScript 布尔变量