create proc InsertRoom
@Rid varchar,
@Rfloor int,
@Rprepri float,
@Rphone varchar,
@Rin int,
@Rtype char
as
select Rid from rinfo where Rid=@Rid 
if(@@rowcount=0)
begin---插入信息
insert into rinfo( Rid,Rfloor,Rprepri,Rphone,Rin,Rtype )values(@Rid,@Rfloor,@Rprepri,@Rphone,@Rin,@Rtype)
end
                    SqlCommand cmd = new SqlCommand("exec InsertRoom @Rid="+textBox1.Text+",@Rfloor='"+textBox2.Text+"',@Rprepri='"+textBox3.Text+"',@Rphone='"+textBox4.Text+"',@Rin=0,@Rtype='"+comboBox1.Text+"'",con);
                    SqlDataReader dr = cmd.ExecuteReader();
                    ......比如插入的Rid是A201,那么只插入了一个A,另外,'"+textBox2.Text+"'和"+textBox2.Text+"的表示方法有什么区别?

解决方案 »

  1.   

    过程里要设置参数类型:
    create table rinfo(Rid varchar(10),Rfloor int,Rprepri float,Rphone varchar(20),Rin int,Rtype char(5))
    go
    create proc InsertRoom
    @Rid varchar(10),
    @Rfloor int,
    @Rprepri float,
    @Rphone varchar(20),
    @Rin int,
    @Rtype char(5)
    as
    --select Rid from rinfo where Rid=@Rid  --这句没作用
    if(@@rowcount=0)
    begin---插入信息
    insert into rinfo( Rid,Rfloor,Rprepri,Rphone,Rin,Rtype )values(@Rid,@Rfloor,@Rprepri,@Rphone,@Rin,@Rtype)
    end
    go
    exec InsertRoom 'ABCEE',25,10.25,'kjsaew',487,'abced'
    select * from rinfo
    go
    drop table rinfo
    drop procedure InsertRoom
    /*
    Rid        Rfloor      Rprepri                Rphone               Rin         Rtype
    ---------- ----------- ---------------------- -------------------- ----------- -----
    ABCEE      25          10.25                  kjsaew               487         abced(1 行受影响)*/'"+textBox2.Text+"'和"+textBox2.Text+" 的区别在:
    如果插入的值是字符串类型的话,那一定要用前者,表示单引号中的内容是个字串(否则就会被认为是对象名)
    数值型的内容,用后者.
      

  2.   

    将文本框内容替换进去后命令字串的形式:
    @Rid='abcd'   这个abcd是字符串
    @Rid=abcd     这个abcd是个对象名.
      

  3.   

    理解你过程里的那句查询语句的作用了,不过一般写成这样:
    create table rinfo(Rid varchar(10),Rfloor int,Rprepri float,Rphone varchar(20),Rin int,Rtype char(5))
    go
    create proc InsertRoom
    @Rid varchar(10),
    @Rfloor int,
    @Rprepri float,
    @Rphone varchar(20),
    @Rin int,
    @Rtype char(5)
    as
    --select Rid from rinfo where Rid=@Rid  --这句没作用
    if not exists(select 1 from rinfo where Rid=@Rid)
    begin---插入信息
    insert into rinfo( Rid,Rfloor,Rprepri,Rphone,Rin,Rtype )values(@Rid,@Rfloor,@Rprepri,@Rphone,@Rin,@Rtype)
    end
    go
    exec InsertRoom 'ABCEE',25,10.25,'kjsaew',487,'abced'
    select * from rinfo
    go
    drop table rinfo
    drop procedure InsertRoom
    /*
    Rid        Rfloor      Rprepri                Rphone               Rin         Rtype
    ---------- ----------- ---------------------- -------------------- ----------- -----
    ABCEE      25          10.25                  kjsaew               487         abced(1 行受影响)*/否则过程会返回多个记录集.