.NET Core 3 中的 ExecuteSqlRaw 参数查询
ExecuteSqlRaw parametric query in .NET Core 3
我正在尝试在 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);
出于某种原因我得到了这个异常
The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.
我做错了什么?
根据错误消息,这是在黑暗中拍摄的,但是:您是否可能同时使用 System.Data.SqlClient
和 Microsoft.Data.SqlClient
?即 sqlServerDbContext.Database.ExecuteSqlRaw
期待 System.Data.SqlClient.SqlParameter[]
(和实例),而你给了它 Microsoft.Data.SqlClient.SqlParameter[]
(和实例)? (反之亦然)- 在 SqlParameter
上尝试 "go to definition",看看它来自哪里。
我正在尝试在 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);
出于某种原因我得到了这个异常
The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects.
我做错了什么?
根据错误消息,这是在黑暗中拍摄的,但是:您是否可能同时使用 System.Data.SqlClient
和 Microsoft.Data.SqlClient
?即 sqlServerDbContext.Database.ExecuteSqlRaw
期待 System.Data.SqlClient.SqlParameter[]
(和实例),而你给了它 Microsoft.Data.SqlClient.SqlParameter[]
(和实例)? (反之亦然)- 在 SqlParameter
上尝试 "go to definition",看看它来自哪里。