[SQL] 어떻게 저장 프로 시저와 DbContext.Database.SqlQuery <TElement> (SQL, PARAMS)를 사용 하는가? EF 코드 첫 번째 CTP5
SQL어떻게 저장 프로 시저와 DbContext.Database.SqlQuery (SQL, PARAMS)를 사용 하는가? EF 코드 첫 번째 CTP5
나는 세 가지 매개 변수가있는 저장 프로 시저를하고 난 결과를 반환하려면 다음을 사용하려고했습니다 :
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
처음에는 SqlParameter에이 PARAMS으로 객체를 사용하여 시도하지만이 작동하지 않았다 다음과 같은 메시지와 함께 SQLEXCEPTION 줬어요 :
제 질문은 당신이 매개 변수를 예상하는 저장 프로 시저에이 방법을 사용할 수있는 방법입니다 그래서?
감사.
해결법
-
==============================
1.다음과 같은 방법으로 SqlParameter에 인스턴스를 제공해야합니다 :
다음과 같은 방법으로 SqlParameter에 인스턴스를 제공해야합니다 :
context.Database.SqlQuery<myEntityType>( "mySpName @param1, @param2, @param3", new SqlParameter("param1", param1), new SqlParameter("param2", param2), new SqlParameter("param3", param3) );
-
==============================
2.또한, 당신은 형식 지정자로 "SQL"매개 변수를 사용할 수 있습니다 :
또한, 당신은 형식 지정자로 "SQL"매개 변수를 사용할 수 있습니다 :
context.Database.SqlQuery<MyEntityType>("mySpName @param1 = {0}", param1)
-
==============================
3.이 솔루션은 SQL 서버 2005 (전용)입니다
이 솔루션은 SQL 서버 2005 (전용)입니다
너희들은 구조 대원하지만 @Dan Mork 말했듯이, 당신은 혼합에 EXEC를 추가해야합니다. 나를 어떻게 된 일인가되었다 :
:
context.Database.SqlQuery<EntityType>( "EXEC ProcName @param1, @param2", new SqlParameter("param1", param1), new SqlParameter("param2", param2) );
-
==============================
4.
return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", new object[] { param1, param2, param3 });
//또는
using(var context = new MyDataContext()) { return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", new object[] { param1, param2, param3 }).ToList(); }
//또는
using(var context = new MyDataContext()) { object[] parameters = { param1, param2, param3 }; return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", parameters).ToList(); }
//또는
using(var context = new MyDataContext()) { return context.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", param1, param2, param3).ToList(); }
-
==============================
5.그들은 SP의 매개 변수의 순서에 의존하기 때문에 대부분의 답변은 부서지기 쉬운 있습니다. 더 나은는 저장된 프로 시저의 PARAMS의 이름을 지정하고 이들에 대한 매개 변수 값을 제공합니다.
그들은 SP의 매개 변수의 순서에 의존하기 때문에 대부분의 답변은 부서지기 쉬운 있습니다. 더 나은는 저장된 프로 시저의 PARAMS의 이름을 지정하고 이들에 대한 매개 변수 값을 제공합니다.
당신의 SP를 호출 할 때 매개 변수의 순서에 대한 걱정없이 명명 된 PARAMS을 사용하려면
ExecuteStoreQuery 및 ExecuteStoreCommand와 SQL 서버 명명 된 매개 변수를 사용하여
가장 좋은 방법을 설명합니다. 여기에 댄 Mork의 대답보다.
예 :. :
var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param"; var sqlParams = new[]{ new SqlParameter("name_param", "Josh"), new SqlParameter("age_param", 45) }; context.Database.SqlQuery<myEntityType>(cmdText, sqlParams)
-
==============================
6.
db.Database.SqlQuery<myEntityType>("exec GetNewSeqOfFoodServing @p0,@p1,@p2 ", foods_WEIGHT.NDB_No, HLP.CuntryID, HLP.ClientID).Single()
또는
db.Database.SqlQuery<myEntityType>( "exec GetNewSeqOfFoodServing @param1, @param2", new SqlParameter("param1", param1), new SqlParameter("param2", param2) );
또는
var cmdText = "exec [DoStuff] @Name = @name_param, @Age = @age_param"; var @params = new[]{ new SqlParameter("name_param", "Josh"), new SqlParameter("age_param", 45) }; db.Database.SqlQuery<myEntityType>(cmdText, @params)
또는
db.Database.SqlQuery<myEntityType>("mySpName {0}, {1}, {2}", new object[] { param1, param2, param3 }).ToList();
-
==============================
7.나는이 방법을 사용 :
나는이 방법을 사용 :
var results = this.Database.SqlQuery<yourEntity>("EXEC [ent].[GetNextExportJob] {0}", ProcessorID);
좋아 나는 그냥 나 서식 모든 GUID를하고 사항 날짜와은 SQLQuery 수행 드롭 때문이다.
-
==============================
8.@ 톰 할러데이의 대답은 PARAMS가 null 인 경우는 같은 예외를 얻을 것이다 당신은 또한 DB Null 허용을 널 (null) 값을 확인하고 전송해야한다는 언급과 올바른
@ 톰 할러데이의 대답은 PARAMS가 null 인 경우는 같은 예외를 얻을 것이다 당신은 또한 DB Null 허용을 널 (null) 값을 확인하고 전송해야한다는 언급과 올바른
매개 변수화 된 쿼리는 '...'공급되지 않은 매개 변수 '@parameterName'를 기대하고있다.
이런 식으로 뭔가 나에게 도움이
public static object GetDBNullOrValue<T>(this T val) { bool isDbNull = true; Type t = typeof(T); if (Nullable.GetUnderlyingType(t) != null) isDbNull = EqualityComparer<T>.Default.Equals(default(T), val); else if (t.IsValueType) isDbNull = false; else isDbNull = val == null; return isDbNull ? DBNull.Value : (object) val; }
(방법에 대한 신용 https://stackoverflow.com/users/284240/tim-schmelter로 이동)
그런 다음를 같이 사용 :
new SqlParameter("@parameterName", parameter.GetValueOrDbNull())
또는 다른 솔루션은 더 간단하지만 일반적인하지 될 것이다 :
new SqlParameter("@parameterName", parameter??(object)DBNull.Value)
-
==============================
9.내가 SELECT 문을 사용하여 두 개의 입력 매개 변수와 반환 3 개 값을 사용 저장 프로 시저를 호출하는 작업 된 것과 동일한 오류 메시지가 있었고 나는 EF 코드 먼저 접근에 아래처럼 문제를 해결
내가 SELECT 문을 사용하여 두 개의 입력 매개 변수와 반환 3 개 값을 사용 저장 프로 시저를 호출하는 작업 된 것과 동일한 오류 메시지가 있었고 나는 EF 코드 먼저 접근에 아래처럼 문제를 해결
SqlParameter @TableName = new SqlParameter() { ParameterName = "@TableName", DbType = DbType.String, Value = "Trans" }; SqlParameter @FieldName = new SqlParameter() { ParameterName = "@FieldName", DbType = DbType.String, Value = "HLTransNbr" }; object[] parameters = new object[] { @TableName, @FieldName }; List<Sample> x = this.Database.SqlQuery<Sample>("EXEC usp_NextNumberBOGetMulti @TableName, @FieldName", parameters).ToList(); public class Sample { public string TableName { get; set; } public string FieldName { get; set; } public int NextNum { get; set; } }
UPDATE : 그것은 SQL 서버 2005없는 EXEC 키워드가 문제를 만들고있다과 같습니다. 그래서 나는 내 대답을 업데이 트 행 아래에 EXEC를 추가 된 모든 SQL Server 버전에서 작동 할 수 있도록하는
List<Sample> x = this.Database.SqlQuery<Sample>(" EXEC usp_NextNumberBOGetMulti @TableName, @FieldName", param).ToList();
-
==============================
10.이 같은 EF 6.x에서와 광산을했다 :
이 같은 EF 6.x에서와 광산을했다 :
using(var db = new ProFormDbContext()) { var Action = 1; var xNTID = "A239333"; var userPlan = db.Database.SqlQuery<UserPlan>( "AD.usp_UserPlanInfo @Action, @NTID", //, @HPID", new SqlParameter("Action", Action), new SqlParameter("NTID", xNTID)).ToList(); }
SqlParameter에 위로 두배로하지 않는 일부 사람들은 변수에 이렇게 화상을 입을 수
var Action = new SqlParameter("@Action", 1); // Don't do this, as it is set below already.
from https://stackoverflow.com/questions/4873607/how-to-use-dbcontext-database-sqlquerytelementsql-params-with-stored-proced by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 SQL에서 날짜 비교 (0) | 2020.03.15 |
---|---|
[SQL] MySQL의 테이블이 마지막으로 업데이트 할 때 어떻게 알 수 있습니까? (0) | 2020.03.15 |
[SQL] SQL 서버로 가져 오기 CSV 파일 (0) | 2020.03.15 |
[SQL] MS SQL 서버 - 지정된 이름을 가진 열을 포함하는 모든 테이블을 찾기 (0) | 2020.03.15 |
[SQL] 나는 SQL 저장 프로 시저에 입력 매개 변수로 열 이름을 전달할 수 있습니다 (0) | 2020.03.15 |