문제

저는 이런 생각을 가지고있는 SQL 을 사용하여 뷰를 추상적인 간단한 데이터베이스에 계산(예:수로에 관계)는 충분하며,필요하지 않습 절차(==절차 상의 코드)

간단한 sql 보기 +a 절>>저장 프로시저를 매개 변수가 있는 때때로

하면서 이 시점상의 방법을 검색하이블/뷰를 작성하지 않고 데이터 SQL 쓰지 않고는 절..

하지만,놀랍게,거기에 보이지 않는 방식으로 이러한 작업을 수행하에 ADO.NET 2.0 이상이 필요합니다.

Let me tell you what I tried:

  • SqlDataAdapter+SqlCommandBuilder 여전히 당신을 필요로 쓰기"를 선택...에서"고 WHERE 문자열에(플러스,을 넣는 경우는,당신의 많은 사용의 업데이트/삽입/DeleteCommand)

  • 입력된 데이터에만 사항을 검색할 수 _entire DataTable_s 고 그런 다음 필터를 적용하다.필터 문자열을 탈출하지 않고 도움...(반드 더블 하나의 견적을 제공해 드립니다.)

  • SQL 엔터티를 도울 수 있을 것 같아 보였습니다 하지만 그들 것 같다:제한되 MSSQL 생성,비 대한 SQL 쿼리를 생성하는 새로운 전체 스택의 DAOs(외에도 기존 도메인 모델은 클래스),reqiuire.net3.5+에 대한 모든 이 etc.(즉,이 모든 단점을 위해 나)

다른 ORMs 유사한 문제로 SQL 을 Entities.

내가 무엇을 찾고 강력한 형식의 방법에 액세스하는 데이터베이스 테이블/ 는:

  • 와 함께 오지 않는 또 다른 설정의 DAOs(K.I.S.S)
  • 할 수 있습 테이블을 쿼리지 않고"쓰기"를 선택하는 문자열에(강력한 형식)
  • 할 수 있습 필터링()테이블이 제대로 탈출한 매개변수(고 없이 검색체 데이터전)
  • 할 수 있습 후 업데이트 문제를 삽입//삭제

나는 상당히 새로운다.Net 지보:이 존재하는가?

감사합니다.

도움이 되었습니까?

해결책

아음속 은 상당히 경량 쿼리 도구 하는 데 사용할 수 있는 직접에 대한 쿼리 데이터베이스 쿼리를 개체는 초록 SQL.하려는 경우,사용할 수도 있습니다 해당 코드를 생성 시설을 지도하는 데이터베이스 테이블을 포코스,또는 단지 만 강력한 형식의 스키마(에 대한 열/테이블 이름 등).

다른 팁

지는 않지만 믿는 당신이 원하는 무엇이 달성을 사용하지 않고 어떤 종류의 ORM,또는 전문 DSL 와 컴파일러는 어떻게 든 에 대한 데이터베이스키 입력/열 정보,등등.

계정으로는 C#일반적인 목적은 언어와 컴파일러가 완전히 인식 데이터베이스의 유형,그 이유는 바인딩할 수 없습니다 그들을 사용하지 않고 일부는 추상화 계층을 포함하는 임시 SQL 쿼리(문자열),NHibernate 또는 유사한 매핑은 파일(문자열)및/또는 DAOs.

당신이 쓰고 싶지 않은 곳에 절을 하나의 방법으로 필터를 사용하여 객체 추가하고 당신이 원하는 조건.예를 들어:

        var sc = new Filter();
        sc.Add("Contacttitle", "Sales Agent");
        sc.Add("city", "london", Logical.Or);
        var customers = D2Bk.Fetch(sc, new Customers());

그러나 당신이 사용하고 싶지 않 DAOs(고객 등),그래서를 작성해야 합니 SQL 문을 지정합 where:

        DataSet ds = D2Bk.Fetch("SELECT * FROM Customers WHERE Contacttitle=@PAR1 OR City=@PAR2", "Sales Agent", "london");

나는 가정을 살펴 보았 LINQADO.Net 데이터 서비스 이러한 만족하지 않는 일부의 요구 사항이 있습니까?

Native ADO.Net 은 데이터베이스의 제공,따라서 제공하는 SQL 문을 직접 인터페이스의 기초 데이터 소스입니다.거기에 다양한 CRUB 기반 솔루션 밖에 있는 시뮬레이션 당신이 제안하는 것을 다양한 도입니다.

우리는 강한 내부의 동향을 떠나는 데이터베이스 데이터베이스 팀이고 사용하는 웹 서비스로는 주요 인터페이스의 데이터베이스는 주로하기 때문에,델파이 codebase 해야 하는 지원됩니다.

실제로 믿을 수 없을 추가 잊 ADO.Net 엔터티 Framework 에 의해 사용되는 ADO.Net 데이터 서비스 사이에 다른 사람입니다.또한 LINQ to Entities 공급자입니다.

나는 이 같은 저장된 절차는 한 번입니다.기본적으로,내가 지정하여 어떤 순열의 분야를 경기에서 내 WHERE 지만,나를 쓰고 싶지 않았 100sprocs 과 약간 다른 매개 변수 목록 및 where.

그래서 내가 뭔가 다음과 같다:

CREATE PROCEDURE [GetSimpleCustomers]
(
@ID varchar(50) = null,
@Name varchar(50) = null,
@IsActive  bit = null,
@Address1 varchar(50) = null,
@Address2 varchar(50) = null,
@City varchar(50) = null,
@State varchar(50) = null,
@Zip varchar(50) = null
)
AS

SELECT ID, Name, IsActive, Address1, Address2, City, State, Zip
FROM SimpleCustomerExample
WHERE (ID = @ID OR @ID is NULL)
AND (Name = @Name OR @Name is NULL)
AND (IsActive = @IsActive or @IsActive is NULL)
AND (Address1= @Address1 or @Address1 is NULL)
AND (Address2= @Address2 or @Address2 is NULL)
AND (City= @City or @City is NULL)
AND (State= @State or @State is NULL)
AND (Zip= @Zip or @Zip is NULL)

이것은 당신이 전화를 sproc 코드에서만 전달 params 에 관심이있을 필터링하고,나머지는 고려되지 않습에 두면 그들은 null 입니다.

그래서,당신이 할 수있는 뭔가

public List<SimpleCustomer> GetAllCustomersFromOhio()
{
    List<SimpleCustomer> list = new List<SimpleCustomer>();
    using (SqlCommand cmd = new SqlCommand(blah blah))
    {
        cmd.Parameters.AddWithValue("State", "Ohio");//or "OH" depending on your convention
        using(IDataReader oDR = cmd.ExecuteReader())
        {
             //hydrate your list of SimpleCustomers from the record set.
        }
    }
    return list;
}

편집:에 답변을 논평:당신은 쉽게 충분히 변경 GetSimpleCustomers 수 DeleteSimpleCustomers 변경하여

SELECT <columns> FROM SimpleCustomers

하기

DELETE FROM SimpleCustomers 

과 동일하게 유지하고 논리입니다.마찬가지입 업데이트합니다.또한,질문에 대답으로 질문:얼마나 많은 테이블을 필요 실제로 이러한 수준의 사용자 정의 필터링?을 구문은 그렇게 될 비슷할 수 있 파운드 그것은 모두 밖으로 일(또는 더 적은 경우에 당신은 망치로 함께 간단한 스크립트를 작성을 위해 당신).

를 사용하는 경우 강력한 형식의 데이터를 만들 수 있습니다,쿼리에는 Visual Studio 편집기를 추가하여 식별자 앞에@에서 쿼리를 실행합니다.데이터 세트를 생성 XSD Visual Studio 에서 파일을 만들고 새로운 테이블이라는 제품,다음을 추가하는 새로운 쿼리합니다.

예를 들어:

select * from Products where Category = @category;

이것은 자동 생성을 위한 방법으로 가득 데이터 또는 datatables 는 추가 매개 변수입니다.그것도 처리합니다 탈출을 잘 이 문자열은(사용한 매개 변수를 명령 객체).내가 사용하는 이 일부를 만들어 최고 간단한 프로토타입 web apps 능하게 해줍니다.

나는 최근에 쓴 쿼리'framework'에 대한 SQL 을 생성하는 절입니다.

기본 구성 요소입니다 BaseQueryArgs 클래스 ToWhereClause()함수를 사용하는 반사를 변환하는 속성 문자열로 섹션이 있습니다.이를 핸들의 작품을 탈출하고 적절하게 서식에는 값입니다.

모든 클래스를 상속하 BaseQueryArgs 단순히 요구하는 선언 공공성,그리고 당신은 끝까지 함께 강력한 쿼리를 개체입니다.을 위한 선택적 특성을,당신은 당신의 값을 널(ref 입력하거나 널<>)과 SQL 발전기 필터 null 값이 있습니다.

당신이 사용할 수 있는 사용자 지정 특성을 정의할 추가 기능을 각 객실:

  • 사용자 정의 열 이름과 다른 속성 이름
  • 사용자 정의 값 처리(같은 날짜에 사용되는 값으로 사이 테스트 expression)

이를 만드는 데 사용할 수 있는 쿼리를 강력한 형식의 쿼리를 개체처럼 그렇:

MyCustomQueryArgs args = new MyCustomQueryArgs
{
    ProductFamilyID = 17,
    Region = Regions.Northwest,
    Active = true
};

List<Product> product = QueryProcessor.GetProductsWhere(args);

GetProductsWhere()는 물론 통화 일부 데이터는 방법에 액세스하기로 생성된 SQL.

가 없 솔루션에 대한 업데이트/삭제이지만,그것은 보이지 않는 하드 방법을 쓰는 것을 변환하는 객체를 인스턴스에서 SQL 문을 사용하여 스위치를 조작하거나 특성을 결정하는 테이블의 이름입니다.

이것은"자신의 롤",하지만 당신에게 자유를 사용자의 필요에 맞게 사용자 정의 포함되지 않습의 많은 무거운 ORM/DAO 포장됩니다.

Mindscapes 광속 제품

그것은 빌드를 입력이 조금 LINQ queriable 는 모델 결과에서 효율적인 SQL 코드에 걸쳐 다양한 데이터베이스 엔진을 포함 Memcached 와 루씬 지원

내가 사용되는 엑스포에는 여러 프로젝트 및 그들의 최신 버전은 더 나은 지원에 대한 쿼리를 처리합니다.

http://www.devexpress.com/Products/NET/ORM/

구현을 같이,그들 모두는 단점이 있다.

내가 사용하는 추상적 데이터 내 프로젝트입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top