问题描述
使用VS2019和sql Server 2019时,从C#调用时我无法获得存储过程来更新所有预期的行,它仅更新1行,即最低值。
我正在使用TVP传递多行,我想使用此值更新RunnerOdds表。因此,当MarketId和SelectionId匹配时,我想用TVP中的值追加Odds列。
使用以下命令从SSMS可以正常工作
declare @NewTableParam OddsType
insert into @NewTableParam(MarketId,SelectionId,Odds)
values ('1.172222777',16732924,'1'),('1.172222777',10227602,35610986,'3'),16764874,'16'),35537128,'2'),34000814,'9')
exec usp_RunnerOddsUpdate @OddsLines = @NewTableParam
但是当我从C#运行时,我只会更新1行。
这是TVP:
CREATE TYPE [dbo].[OddsType] AS TABLE(
[MarketId] [nvarchar](20) NOT NULL,[SelectionId] [bigint] NOT NULL,[Odds] [nvarchar](1000) NULL
)
这是程序:
ALTER PROCEDURE [dbo].[usp_RunnerOddsUpdate]
@OddsLines OddsType READONLY
AS
BEGIN
update ro
set
ro.Odds += ',' + ol.Odds
from
@OddsLines ol
join RunnerOdds ro on
ro.SelectionId = ol.SelectionId and
ro.SelectionId = ol.SelectionId
END
这是C#ado.net :(奇数是一个列表)
var dt = odds.ToDataTable(); // convert list object to datatable for use with TVP
using (sqlConnection conn = sqlServerConn.GetConnection)
{
conn.open();
using (sqlCommand cmd = new sqlCommand("usp_RunnerOddsUpdate",conn))
{
cmd.CommandType = CommandType.StoredProcedure;
var param1 = cmd.Parameters.AddWithValue("@OddsLines",dt);
param1.sqlDbType = sqlDbType.Structured;
param1.TypeName = "OddsType"; // TVP
// execute query
int numberRecordsAffected = cmd.ExecuteNonQuery();
if (numberRecordsAffected == 0)
{
return false; // Failed to insert
}
else
{
log.Info(string.Format("Updated {0} lines",numberRecordsAffected));
return true;
}
}
}
这可能很简单,但我听不懂。有任何想法吗?
感谢阅读。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)