Command.CommandText = "select Playfile.FileName from Playfile where Playfile.PID IN(select Playlist.PID from Playlist where Playlist.Name1 = '" & TextBox1.Text & "')"这样说 表达式中的类型不匹配
可是我把 PID 后面的 IN 换成 “=” 后就可以了。如果要用“IN”应该怎么写呢?
为什么会这样子 大家说说见解 谢谢了 呵呵

解决方案 »

  1.   

    可能是括号里的select出来的是string而你的playfile.PID的格式是int所以IN会出现类型不匹配
    试试
    Select Playfile.FileName from Playfile where Playfile.PID IN (convert(int, select Playlist.PID from Playlist where Playlist.Name1 = '" & TextBox1.Text & "'))
      

  2.   

    Playfile和Playlist这两个有的PID字段的类型定义各是啥呢
      

  3.   

    http://download.csdn.net/source/1644211
      

  4.   


    两个表的 PID 类型设置为同一种类型了吗?
      

  5.   

    Playfile.PID 和 Playlist.PID类型不一致所以不可以用 in
    但用“=”是sql的引擎可以自动转换类型进行匹配,所以用“=”就是可以的
      

  6.   

    To of123:请问怎么设置PID类型为同一种类型?谢谢了
      

  7.   

    alter table modify PID integer not null
    这只是个informix的例子。
      

  8.   

    No null value, these are the 2 tables:
    Playfile:
    PID               Filename
    456                qw
    234                rt
    234                fg
    123                aaPlaylist:
    PID               Name1
    123                qq
    234                ss
      

  9.   

    1楼,没尝试就别乱讲.
    还有你贴出来的代码有很大问题,如果select出两个结果,必定报错.明显楼主的需求会出现两个PID
    试试下面这句,肯定报错.
    select A = (CONVERT(INT,(SELECT a= '100' union SELECT a= '110')))楼主的是什么数据库 ACCESS/MS SQL/MYSQL/Oracle ... ...?
    以下语句在MS-SQL 2000中通过. 表1的PID是 int,表2的PID是 CHAR(10),使用In是没有问题的.
    IF OBJECT_ID('tempdb..#TMP') > 0 DROP TABLE #TMPCreate TABLE #TMP(ID int identity(1,1) ,PID int,FileName NCHAR(10))INSERT INTO #TMP Values(123,N'qw')  
    INSERT INTO #TMP Values(456,N'rt')
    INSERT INTO #TMP Values(456,N'fg')
    INSERT INTO #TMP Values(123,N'aa')
    --INSERT INTO #TMP Values(123,NULL)IF OBJECT_ID('tempdb..#TMP1') > 0 DROP TABLE #TMP1
    Create TABLE #TMP1(ID int identity(1,1) ,PID char(10) ,Name1 NCHAR(10))INSERT INTO #TMP1 Values(123,N'qq')
    INSERT INTO #TMP1 Values(234,N'ss')
    select #TMP.FileName from #TMP 
    where #TMP.PID IN(
    select #TMP1.PID 
    from #TMP1 
    where #TMP1.Name1 = 'qq'
    )
    select A = (CONVERT(INT,(SELECT a= '100' union SELECT a= '110')))
      

  10.   

    To:Lost_Painting 谢谢
    我是MS ACCESS呵呵