2012-11-06 6 views
1

나는 다음 코드를 사용하여 테이블 데이터 유형을 사용하여 데이터베이스에 테이블을 삽입하고 있습니다 :데이터베이스에 테이블을 삽입하는 중 오류가 발생 했습니까?

CREATE TYPE BackUpDoctorLocationAreaRoom AS TABLE (
[RoomId] bigint, 
[AreaId] bigint, 
[LocationId] bigint 
); 

Alter proc proc_tblBackUpDoctorInsert 
(
@Id uniqueidentifier='', 
@BackUpDoctorId uniqueidentifier='1323e1f4-7a93-4b45-9a9b-3840c32fd6d8', 
@StartDate datetime='11/08/2012', 
@EndDate datetime='11/09/2012', 
@StartTime datetime='22:22:22', 
@EndTime datetime='01:11:11', 
@CreatedBy uniqueidentifier='acf7961c-4111-49ad-a66a-ce7f9ce131bd', 
@ModifiedBy uniqueidentifier='acf7961c-4111-49ad-a66a-ce7f9ce131bd', 
@createdDate datetime='11/6/12 3:09:58 AM', 
@ModifiedDate datetime='11/6/12 3:09:58 AM', 
@tblBackUpDoctorsForRooms BackUpDoctorLocationAreaRoom READONLY 
)  
as  
set xact_abort on 
declare @newId uniqueidentifier;  
set @newId = newid(); 
insert into tblBackUpDoctor (Id,BackUpDoctorId,StartDate,EndDate,StartTime,EndTime,CreatedBy,ModifiedBy, 
createdDate,ModifiedDate,IsActive,isdeleted) values 
(@newId,  
@BackUpDoctorId,  
@StartDate,  
@EndDate,  
@StartTime,  
@EndTime,  
@CreatedBy,  
@ModifiedBy,  
@createdDate,  
@ModifiedDate,  
1,0)  
declare @IdFortblBackUpDoctorsForRooms uniqueidentifier;  
set @IdFortblBackUpDoctorsForRooms = newid();  
delete from tblBackUpDoctorsForRooms where [email protected] and Roomid in (Select roomid from @tblBackUpDoctorsForRooms) 
delete from tblbackupdoctor where [email protected] 
insert into tblBackUpDoctorsForRooms (BackUpRecordId,Roomid,Araeid,locationid)  
Select @newId,roomid,areaid,locationid from @tblBackUpDoctorsForRooms 
select @newId 

이 내가 그 테이블을 사용하고있는 특검팀입니다.

public string InsertBackUpDoctor(ClsBackUpDoctorProp objProp, DataTable dtLocAreaRoom) 
{ 
    String ConnectionString = CCMMUtility.GetCacheForWholeApplication(); 
    String backUpRecordId = ""; 
    SqlParameter[] param = new SqlParameter[12]; 
    param[0] = new SqlParameter("@Id", objProp.Id); 
    param[1] = new SqlParameter("@BackUpDoctorId", objProp.BackUpDoctorId); 
    param[2] = new SqlParameter("@StartDate", objProp.StartDate); 
    param[3] = new SqlParameter("@EndDate", objProp.EndDate); 
    param[4] = new SqlParameter("@StartTime", objProp.StartTime); 
    param[5] = new SqlParameter("@EndTime", objProp.EndTime); 
    param[6] = new SqlParameter("@CreatedBy", objProp.CreatedBy); 
    param[7] = new SqlParameter("@ModifiedBy", objProp.ModifiedBy); 
    param[8] = new SqlParameter("@createdDate", CCMMUtility.GetCurrentDateTimeByTimeZone("US Mountain Standard Time")); 
    param[9] = new SqlParameter("@ModifiedDate", CCMMUtility.GetCurrentDateTimeByTimeZone("US Mountain Standard Time")); 
    param[10] = new SqlParameter("@CurrentDate", objProp.CurrentDate); 
    param[11] = new SqlParameter("@tblBackUpDoctorsForRooms ", dtLocAreaRoom); 


    backUpRecordId = SqlHelper.ExecuteScalar(ConnectionString, "proc_tblbackupdoctorInsertBackUpDoctors", param).ToString(); 
    return backUpRecordId; 
} 

여기에 내가 삽입을 시도 할 때 오는 오류는 다음과 같습니다 :

내 클래스 파일의 코드는

들어오는 테이블 형식 데이터 스트림 (TDS) 원격 프로 시저 호출 (RPC) 프로토콜 스트림이 올바르지 않습니다. 테이블 값 매개 변수 12 ("@tblBackUpDoctorsForRooms"), 행 0, 열 0 : 데이터 형식 0xF3 (사용자 정의 테이블 형식)에는 길이가 0이 아닌 데이터베이스 이름이 지정되어 있습니다. 테이블 값 매개 변수에는 데이터베이스 이름이 허용되지 않으며 스키마 이름과 유형 이름 만 유효합니다.

같은 다만

param[11] = new SqlParameter("@tblBackUpDoctorsForRooms ", dtLocAreaRoom); 

아니라 뭔가 : 나는 당신이 당신의 사용자 정의 매개 변수를 전달하는 방법을 변경해야 할 것 생각

+0

@ViralShah을 추가 ... –

답변

2

..이오고 저를 도와주세요 이유를 잘 모릅니다

SqlParameter parameter = new SqlParameter();   

parameter.ParameterName = "@tblBackUpDoctorsForRooms";    
parameter.SqlDbType = System.Data.SqlDbType.Structured; 
parameter.TypeName = "BackUpDoctorLocationAreaRoom";     
parameter.Value = dtLocAreaRoom;         

param[11] = parameter;  
+0

없고 ....... 그것이 작동하지 않습니다 나를 위해 ....... –

0

parameter.SqlDbType = System.Data.SqlDbType.Structured; 
parameter.TypeName = "BackUpDoctorLocationAreaRoom"; 
시도

하고 통화에서이 NVARCHAR위한 것이며 내가 그 장소에 DataTable을 사용하고 그 요구하고 있지 않다

backUpRecordId = SqlHelper.ExecuteScalar(ConnectionString,CommandType.StoredProcedure 
"proc_tblbackupdoctorInsertBackUpDoctors", param).ToString(); 
+0

하지만 명령 유형을 제공하지 않으면 내가 기본적으로 저장된 proc 걸릴 것 같아 .. 그래서 아니 ??????????? –

+0

저장 프로 시저에서 값을 반환하거나 테이블 형식 변수를 사용하는 경우 명시 적으로 명령 유형을 지정해야합니다. 또한 기본 명령 유형은 StoredProcedure가 아닙니다. –

+0

hmmmm 감사합니다. 나를 위해 일해. 나는 바보 같은 실수를 저질 렀다. ..... –