C# update语句在SSM中工作,但在代码中不工作

C# update语句在SSM中工作,但在代码中不工作,c#,sql,sql-server-2008,C#,Sql,Sql Server 2008,我两天来一直把头撞在墙上。此update语句在ssms中运行时有效 update dbo.DEMOGRAPHICS set ETHNICITY = (select distinct(ethnicity) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '') , GENDER = (select distinct(GENDER) from dbo.DEMOGRAPHICS whe

我两天来一直把头撞在墙上。此update语句在ssms中运行时有效

update dbo.DEMOGRAPHICS 
set ETHNICITY = (select distinct(ethnicity) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '')
, GENDER = (select distinct(GENDER) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '')
, MARITAL_STATUS = (select distinct(MARITAL_STATUS) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '')
, RELIGION = (select distinct(RELIGION) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '')
, VETERAN = (select distinct(VETERAN) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID =  'P000084716' and ACADEMIC_SESSION != '')
, CITIZENSHIP = (select distinct(CITIZENSHIP) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = 'P000084716'and ACADEMIC_SESSION != '')
,RETIRED = (select distinct(RETIRED) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '000084716' and ACADEMIC_SESSION != '')
, LEGAL_RESIDENCE = (select distinct(LEGAL_RESIDENCE) from dbo.DEMOGRAPHICS where   PEOPLE_CODE_ID = 'P000084716' and ACADEMIC_SESSION != '')
where PEOPLE_CODE_ID = 'P000084716'  and ACADEMIC_SESSION = ''
但是在代码中进行更新并不能

string updDemoRecords = @"update dbo.DEMOGRAPHICS 
set ETHNICITY = (select distinct(ethnicity) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, GENDER = (select distinct(GENDER) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, MARITAL_STATUS = (select distinct(MARITAL_STATUS) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, RELIGION = (select distinct(RELIGION) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, VETERAN = (select distinct(VETERAN) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, CITIZENSHIP = (select distinct(CITIZENSHIP) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}'and ACADEMIC_SESSION != '')
,RETIRED = (select distinct(RETIRED) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
, LEGAL_RESIDENCE = (select distinct(LEGAL_RESIDENCE) from dbo.DEMOGRAPHICS where PEOPLE_CODE_ID = '{0}' and ACADEMIC_SESSION != '')
where PEOPLE_CODE_ID = '{0}'  and ACADEMIC_SESSION = ''";
updDemoRecords = string.Format(updDemoRecords, peopleOrgCodeID);
pcCon = new SqlConnection(pcConnString);
SqlCommand doUpdDemoRecords = new SqlCommand(updDemoRecords, pcCon);
pcCon.Open();
doUpdDemoRecords.ExecuteNonQuery();
pcCon.Close();

也从存储的进程中尝试了它,但它也不会更新相关的行。这是sql server 2008和c#.net

在我看来,问题在于您使用的是一个实际的数字(
peopleOrgCodeID
)-在SSMS版本(使用字符串)中使用时,这将不会有前导的
0
es

因此,如果
peopleOrgCodeId
是一个值为
84716
的整数(或长整数),则您的
WHERE
子句将结束为:

where PEOPLE_CODE_ID = '84716'
而不是:

where PEOPLE_CODE_ID = '000084716'
您可以通过使用或传递带前导零的字符串值来解决此问题



我会提到SQL注入是一个可能的问题,但是如果
peopleOrgCodeID
确实是一个整数,那么在这个例子中您是安全的。但是,我仍然会使用参数化查询而不是
string.Format

什么类型是
peopleOrgCodeID
?什么是“不起作用”呢?错误消息告诉您什么?您是否正确地将SQL分配给updDemoRecords变量?@usr-我假设查询不会更新。。。没有错误,但没有预期的结果。这是正确的。我想是的。我在string.format后面抓取它,看看它传递了什么。这是一个不带参数的控制台应用程序。人员代码以一个P开头。我编辑了原始问题。@Brian-那么它是一个字符串?您确定
peopleOrgCodeID
包含正确的值吗?您是否使用SQL探查器查看实际传入SQL Server的内容?