首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExecuteSqlRaw内核3中的.NET参数查询

ExecuteSqlRaw内核3中的.NET参数查询
EN

Stack Overflow用户
提问于 2020-01-20 16:08:40
回答 1查看 1.1K关注 0票数 2

我试图在C#中执行参数查询,代码如下:

代码语言:javascript
复制
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对象.

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 16:14:05

这是一个基于错误信息的暗箱操作,但是:您是否可能同时使用System.Data.SqlClientMicrosoft.Data.SqlClient?也就是说,sqlServerDbContext.Database.ExecuteSqlRaw期待一个System.Data.SqlClient.SqlParameter[] (和实例),而您已经给它一个Microsoft.Data.SqlClient.SqlParameter[] (和实例)?(反之亦然)--在SqlParameter上尝试“转到定义”,看看它是从哪里来的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59827049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档