我在 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();