2012-09-27 3 views
0

Sql에서 @tpv를 매개 변수로 사용하는 프로 시저가 있습니다. 내가 C#에서 프로 시저를 실행할 때 - 작동하지 않습니다. 그리고 SQL에서 프로 시저를 실행할 때 - 완벽하게 작동합니다. 왜?@tpv가 C에서 작동하지 않는 절차 #

편집 : 내가 C#에서 proc을 실행할 때 - 오류가 발생하지 않지만 정상적으로 작동하지만 테이블이 전혀 변경되지 않았으며 misRow=1 대신 misRow=0이 표시됩니다.

절차 : SQL을에서

CREATE procedure [dbo].[UpdateAdsList] 
@tvp ListCrc32 readonly 
as 
update tb 
set a_update=CONVERT(date,GETDATE(),101) 
from Ads tb 
join @tvp t on t.crc32 = a_crc32 

Exec에서 : C에서 #

declare @ ListCrc32 

insert into @ (crc32) 
select 1652908150 

exec UpdateAdsList @ 

Exec에서 :

int mis=1652908150; 

//create the dataTable 
dt = new DataTable(); 
dt.Columns.Add("crc32", typeof(int)); 
var row = dt.NewRow(); 
row["crc32"] = mis; 
dt.Rows.Add(row); 

//exec the proc 
con.Open(); 
var cmd = new SqlCommand("UpdateAdsList",con); 
cmd.Parameters.Add("@tvp",SqlDbType.Structured); 
cmd.Parameters["@tvp"].Value = dt; 
cmd.Parameters["@tvp"].TypeName = "ListCrc32"; 
int misRow=cmd.ExecuteNonQuery(); 
con.close(); 
+1

"작동하지 않는다"는 것은 무엇을 의미합니까? 오류가 있습니까? 그렇다면 무엇? –

+0

내 질문을 업데이트했습니다. –

+0

어떤 차이가 있는지 모르겠지만 궁금합니다. 귀하의 열은 typeof (int)입니다. 왜 실수를 이중으로 변환합니까? –

답변

1

당신은 입력하지 않고 매개 변수를 추가 할 수 있습니다

int mis=1652908150; 

//create the dataTable 
dt = new DataTable(); 
dt.Columns.Add("crc32", typeof(int)); 
var row = dt.NewRow(); 
row["crc32"] = mis; // I do not see the point of convert. 
dt.Rows.Add(row); 

//exec the proc 
var cmd = new SqlCommand("UpdateAdsList",con); 
cmd.CommandType = Syste.Data.CommandType.StoredProcedure; 

cmd.Parameters.AddWithValue("@tvp",dt); 

con.Open(); 

int misRow=cmd.ExecuteNonQuery(); 

con.close(); 
+0

오류가 발생합니다 : "테이블 유형 매개 변수 '@ tvp'는 유효한 유형이어야합니다." –

+0

재미 .. 유형이 db에 잘 정의되어있는 한 그 오류는 없습니다. –

+0

형식이 내 db에 잘 정의되어 있습니다. 나는 그것이 왜 오류를 제기하는지 모르겠다. –