日期:2014-05-18  浏览次数:20793 次

MSSQL数据库双主键问题,请指教,顶者有分
public   bool   Exists(string   sjid,string   jb)
                {
                        bool   sbs;
                        SqlParameter[]   parms   =   new   SqlParameter[]   {   new   SqlParameter( "@sjid ",   sjid),new   SqlParameter( "@jb ",jb)   };
                        SqlDataReader   sdr   =   SqlDb.ExecuteReader(SqlDb.ConnMainString,   CommandType.Text,   SQL_SELECT,   parms);                        
                        if   (sdr!=null)
                        {
                                sbs   =   true;
                        }
                        else
                        {
                                sbs   =   false;
                        }
                        return   sbs;
                }
//其中sjid   和jb为同一张表的双主键
private   const   string   SQL_SELECT   =   "select   sjid,jb   from   sj_mz_ycfswk_sjpsjl   where   sjid=@sjid   and   jb=@jb   ";
//SQL查询语句
问题描述如下:
现在我里面有个0000091   /*(数据ID)*/       city       /*(行政级别)*/
但是每当我想插入时     0000091   /*(数据ID)*/       gj       /*(行政级别)*/时,老是执行sbs   =   true;

------解决方案--------------------
你确定你建的是联合主键吗?

你看你的参数是不是正确传进去了
用你的查询语句直接在数据库中运行看看

------解决方案--------------------
我觉得你这个if (sdr!=null) 判断有问题..
------解决方案--------------------
首先你要明确下

判断时用

if(dr.Read()){
//重复
}

二你的参数是否正确,你可以把它写死如
select sjid,jb from sj_mz_ycfswk_sjpsjl where sjid= '0000091 ' and jb= 'gj '

试试
------解决方案--------------------
不可能吧,是联合主键不咯
------解决方案--------------------
while(dr.read()!=null)
------解决方案--------------------
// 按道理 xxxCommond.ExecuteReader(...) 返回的 xxxDataReader != null
// 不知道你的SqlDb.ExecuteReader 内部是如何实现的,
// 故尝试这样:
if (sdr!=null) {
sbs = true;
}
else
{
sbs = false;
}

> > > > >

sbs = ((sdr != null) && sdr.HasRow);
------解决方案--------------------