간단하게 index.cshtml 에서 GetDbData 를 호출해 원하는 필드 결과값을 얻어오는 소스인데
아래처럼 애러가 나서 질문 드립니다. 여러가지 방법으로 해보다.. 해보다.. 지쳐버렸어요.. ㅜ.ㅜ
# index.cshtml
@{
// select * from rb_s_mbrid where uid=1 과 같은 의미 입니다.
var kkk = @_DB.GetDbData("rb_s_mbrid", "uid=1", "*");
@kkk[0];
}
# /App_Code/_DB.cshtml
@helper GetDbData(string table, string whereis, string data) {
var db = Database.Open(@AppState["DB_Name"].ToString());
var whereis_set = "";
if(whereis != "") {
whereis_set = " WHERE "+whereis;
}
var result = db.QuerySingle("SELECT "+data+" FROM "+table+whereis_set);
if(result == null) {
return;
}
else {
@result;
}
}
* 에러메시지
Server Error in '/' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0021: Cannot apply indexing with [] to an expression of type 'System.Web.WebPages.HelperResult'
Source Error:
Line 28:
Line 29: var kkk = @_DB.GetDbData(@AppState["table_s_mbrid"].ToString(), "uid='"+Session["mbr_uid"]+"'", "*");
Line 30: @kkk[0];
Line 31:
Line 32: var kk = new object[] {};


김대우 입니다. 몇가지 테스트를 해 보니, @helper로 app_code에 선언해 만들어 받는 return 값은 HelperResult라는 type으로 리턴됩니다.
여러가지 방법으로 결과셋을 list로도 넘겨 처리 할 수 있을까 생각해 보았으나, 찾아보니, 현재의 @helper로 생성하면 결과를 string 형태로만 return 가능해 보이네요. 아무래도 @helper로 만들어 처리하시기 보다는 다른 방법을 찾아 봐야 할 것 같습니다.
대안은 아래 같은데요... Razor의 경우 워낙 DB 모듈 처리가 쉬우니...
- _DB.cshtml 은 결과셋을 생성해 리턴하는게 아니라, 최종 SQL 쿼리 구문(string)만을 제작해 return 한다.
- 이어서 개별 페이지에서 db.query(리턴된스트링)으로 처리한다.
var result = db.QuerySingle("return된 스트링처리");
아래에서 result를 받아서 처리 하는 방법도 한 방법일 듯 합니다.
좀더 알아 보도록 하겠습니다. 감사합니다.