2014-01-12 6 views
1

Oracle 데이터베이스에 바인드 된 양식이 있습니다.사용자에게 INSERT 권한 만있는 경우 양식을 데이터베이스에 바인드하는 방법

이 양식은 데이터를 입력하기위한 것입니다.

사용자가 양식이 연결된 테이블에 대한 모든 권한을 가지고 있으면 모든 것이 완벽하게 작동합니다. 그러나 사용자가 쓰기 권한 만 가지고 있으면 양식을 바인딩 할 수 없습니다.

Private Function GetDataTable(ByVal TableName As String, ByVal SQL As String) As DataTable 
    Dim Command As OracleCommand 
    Dim DataSet As New DataSet 
    Dim DataTable As DataTable 
    Dim TempDataAdapter As OracleDataAdapter 

    Command = New OracleCommand(SQL, OracleObject.Connection) 
    TempDataAdapter = New OracleDataAdapter(Command) 
    TempDataAdapter.FillSchema(DataSet, SchemaType.Source, TableName) 
    TempDataAdapter.Fill(DataSet, TableName) 

    DataTable = DataSet.Tables(TableName) 

    Return DataTable 
End Function 

를 사용하려면, 내가 할 :

GetDataTable('Table1','SELECT * FROM Table1') 

이 코드 작품을 여기

내가 모든 폼 컨트롤이 바인딩되는에 데이터 테이블을 얻기 위해 사용하고 코드입니다 사용자가 선택 권한을 가지고 있지 않으면 라인은 :

TempDataAdapter.FillSchema(DataSet, SchemaType.Source, TableName) 

은 예외입니다. 코드에서 요청 된대로 선택 쿼리를 실행하기 때문에 정상입니다.

사용자가 쓰기 권한 만 가지고있는 경우 양식을 테이블에 바인딩하는 방법은 무엇입니까?

+0

여기에 약한 형식의 데이터 세트를 사용하고 있기 때문에 당신은 '구속'가 무슨 뜻인지 확실하지, 어쨌든 - 당신은 삽입을하려는 경우, 당신은 할 필요가 없습니다 .Fill을 사용하여 기존의 모든 행을 먼저 당깁니다. – peterG

+0

내 말은 사용자가 삽입 권한 만 가지고있을 때 데이터를 삽입하는 양식을 가지고 있다는 것입니다. 어떤 아이디어라도 제발? –

+0

이것을 달성하는 데는 여러 가지 방법이 있습니다. 이 주변에 어떤 다른 제약 조건이 있는지 모르겠으므로 다른 것들에 대해 추천 할 수는 없습니다. 그러나 강력한 형식의 데이터 집합을 만들어 디자이너에서 바인딩 한 다음 .update를 호출 할 수 있습니다. 또는 텍스트 상자 값에서 SQL 삽입 쿼리를 채울 수 있습니다. 그러나 요점은 SELECT 쿼리/.Fill 메서드를 먼저 수행 할 필요가 없다는 것입니다. – peterG

답변

0

Ref-Cursor를 retursn하는 함수를 사용하면 함수에 대한 실행 권한 만 가져야합니다.

예 :

create or replace function GetTable(the_table in varchar2) return sys_refcursor is 
res sys_refcursor; 
begin 
open res for 'select * from '||the_table; 
return res; 
end; 
+0

예 사용자가 해당 함수에 대해 '실행'권한을 가지고 있다면 커서를 통해 '선택'권한이없는 테이블의 내용을 계속 볼 수 있습니다. 일관성이 없습니까? –

+0

네, 맞습니다. 물론이 특정 분류에서는 쓸모가 없거나 일관성이 없다고하지만, 특정 열 (예 : Employee 테이블의 열 급여) 또는 레코드를 제외하려는 경우에 적합합니다. "가상 사설 데이터베이스 (Virtual Private Database)"와 같은 추가 기능이 없으면 SELECT를 통해 테이블에서 * 모든 것을 선택할 수 있습니다. 커서를 반환하는 함수를 사용하면 매우 세부적으로 쉽게 제어 할 수 있습니다. –

관련 문제