@tpv无法在c#中运行的过程

时间:2012-09-27 12:39:54

标签: c# sql procedure

我在Sql中有一个程序,它将@tpv作为参数。当我从c#执行程序时 - 它不起作用,当我从Sql执行程序时 - 它工作正常。为什么呢?

编辑:当我从c#执行proc时 - 它没有得到错误,看起来它工作正常,但表格根本没有改变而misRow=0而不是misRow=1

步骤:

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

来自Sql的执行:

declare @ ListCrc32

insert into @ (crc32)
select 1652908150

exec UpdateAdsList @

来自C#的执行:

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 :(得分: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();