2012-11-06 26 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

@ViralShah这是nvarchar的,我不要求我使用上的那个地方的数据表.. –

回答

2

我相信你不得不改变你通过自定义参数的方式:

不仅仅是

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

而是像

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"; 

,并在通话中添加

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

但如果不提供命令类型,我认为它需要默认存储过程..不是所以??????????? –

+0

如果您从存储过程返回值或使用表类型变量,则需要明确指定“命令类型”。另外默认的命令类型不是StoredProcedure。 –

+0

嗯,感谢它为我工作..我犯了一个愚蠢的错误..... –

相关问题