c#运行查询来更新SQL server数据库,并不是所有的记录都被更新
本文关键字:更新 记录 并不是 数据库 查询 运行 SQL server | 更新日期: 2023-09-27 18:17:42
我在c#中运行查询更新sql server中的表时遇到了问题。
我总共更新了我的表中的2500条记录。然而,大约有350行acq_rank字段没有被更新。因此,我通过查看cmdText变量和参数值来检查查询。如果我复制这些值,并在sql server手动运行查询(这篇文章的底部)查询更新表。我不知道发生了什么事。
比较有更新和没有更新的记录,似乎任何名称中带有逗号的公司都是没有更新的。我该如何避开这个问题?
在调试代码时,我可以看到公司名称通常是"some name",但是当它们包含逗号时,它看起来像"'"some name加逗号'"
c# for (int i = 0; i < rankList.Count; i++)
{
string cmdText;
if(rankList[i].company_id == "NULL")
cmdText = "update MA_DEALS_COUNTRY set acq_rank = @rank where deal_id = @deal and company_id is null and co_name = @coname";
else
cmdText = "update MA_DEALS_COUNTRY set acq_rank = @rank where deal_id = @deal and company_id = @co_id and co_name = @coname";
_command = new SqlCommand(cmdText, _connection);
if (rankList[i].company_id == "NULL")
{
_command.Parameters.Add("@deal", System.Data.SqlDbType.VarChar).Value = rankList[i].DealId;
_command.Parameters.Add("@coname", System.Data.SqlDbType.VarChar).Value = rankList[i].CoName;
_command.Parameters.Add("@rank", System.Data.SqlDbType.Int).Value = rankList[i].Rank;
}
else
{
_command.Parameters.Add("@deal", System.Data.SqlDbType.VarChar).Value = rankList[i].DealId;
_command.Parameters.Add("@co_id", System.Data.SqlDbType.VarChar).Value = rankList[i].company_id;
_command.Parameters.Add("@coname", System.Data.SqlDbType.VarChar).Value = rankList[i].CoName;
_command.Parameters.Add("@rank", System.Data.SqlDbType.Int).Value = rankList[i].Rank;
}
_command.ExecuteNonQuery();
Console.WriteLine("row " + i.ToString());
}
SQL Server Manual Update
我包含了两个更新语句—一个用于company_id为null时,另一个用于当它不是
时。declare @rank int
declare @deal varchar(20)
declare @co_id varchar(5)
declare @coname varchar(max)
set @rank = 0
set @deal = '136344MM'
set @co_id = 'AB240'
set @coname = 'Company Capital Partners, Inc.'
update MA_DEALS_COUNTRY set acq_rank = @rank where deal_id = @deal and company_id is null and acquirer_name = @coname
update MA_DEALS_COUNTRY set acq_rank = @rank where deal_id = @deal and company_id = @co_id and acquirer_name = @coname
更新语句比较co_name = @coname时可能出现问题。你必须遵循代码,在这里比较的是一个带有逗号的公司。
你还提到它看起来像"'"some name,'"而不是"some name"
试题:
。
_command.Parameters.Add("@coname", System.Data.SqlDbType.VarChar).Value = Convert.ToString(rankList[i].CoName);
b .
_command.Parameters.Add("@coname", System.Data.SqlDbType.VarChar).Value = rankList[i].CoName.ToString();
C。
在字符串中搜索'''和'"'字符并删除它们。这并不是最好的方法,因为在赋值时,'''或'"'一开始就不应该出现。
string valueString = rankList[i].CoName.ToString();
while (valueString.IndexOf('"') > -1)
{
if (valueString.Length - 1 == valueString.IndexOf('"'))
valueString = valueString.Remove(valueString.IndexOf('"'));
else
valueString = valueString.Remove(valueString.IndexOf('"'), valueString.IndexOf('"')+1);
}
while (valueString.IndexOf('''') > -1)
{
if (valueString.Length - 1 == valueString.IndexOf(''''))
valueString = valueString.Remove(valueString.IndexOf(''''));
else
valueString = valueString.Remove(valueString.IndexOf(''''), valueString.IndexOf('''')+1);
}
_command.Parameters.Add("@coname", System.Data.SqlDbType.VarChar).Value = valueString;
对于初学者来说,无论@co_id
参数是否为空,以下版本的查询都可以工作:
update MA_DEALS_COUNTRY set acq_rank = @rank
where deal_id = @deal
and nullif(@co_id, company_id) is null
and co_name = @coname
考虑到您如何测试rankList[i].company_id
的可空性,这应该会有所帮助。