解决方案 »

  1.   

    目测SQL语句拼接错误
    断点,把拼接好的字符串复制出来,放数据库里执行一下,就知道到底差什么了
      

  2.   


    开头粘出来的那个就是在sql数据库中运行成功的语句,把他拿到C#下面来就出错了
      

  3.   

    还有,带begin和end的语句,最好是定义成存储过程,直接执行
    而不要把整个sql语句放c#里拼接执行
      

  4.   


    开头粘出来的那个就是在sql数据库中运行成功的语句,把他拿到C#下面来就出错了
    我是说,你把C#里拼接出来的东西重新复制出来,再执行
    你能保证代码拼接的字符串跟原来的是一模一样的?
    首先那些\r\n就多余的
      

  5.   

    我一般是后面多一个空格,\r\n没试过"select * " +
    "from " +
    "table1"
      

  6.   

    移动到C#中之前有没有 把原来都删除掉??
    建议 把语句放到储存过程proc中,C#中直接执行proc,方便维护表结构。
      

  7.   

    字符串拼接用@" "吧……加个@后面直接粘SQL语句进去。
      

  8.   

    cmd.CommandText = @"......";
      

  9.   


    string s = @"if not Exists(select * from sysobjects where name = 'T_CommandConfig'and xtype='U')
    begin
    create database CommandConfig
    create table CommandConfig.dbo.T_CommandConfig(CODE varchar(30),ADDRESS varchar(30),COM varchar(30),BUTERATE varchar(30),PROTOCOL varchar(30),PARITY varchar(30),TYPE varchar(30))
    end; ";9楼说的对,像这样写,把SQL语句直接这样写进去好了,不要胡乱拼接
    很明显你最后的代码end后面连分号都没加,光目测就问题一大堆
      

  10.   

    事实证明语句并没有什么问题 复制下来完全可以用 就是拼接问题了 还有\r\n什么的确实没用过 然后就是需要写上数据库名CommandConfig么...连接字符串不是有了么
      

  11.   

    "if not Exists(select * from sysobjects where name='T_CommandConfig'and xtype='U')\r\n                            begin\r\n                            create database CommandConfig\r\n                            create table CommandConfig.dbo.T_CommandConfig(CODE varchar(30),ADDRESS varchar(30),COM varchar(30),BUTERATE varchar(30),PROTOCOL varchar(30),PARITY varchar(30),TYPE varchar(30))\r\n                            create table CommandConfig.dbo.T_datagather(DEVICE varchar(30),DATA float,TIME datetime)\r\n                            end;"
    这个是用string s=@“....”;的拼接结果还是一样的
      

  12.   

    单独拿出来放到sql数据库中能用,我把\r\n去掉了也不行,还是报一样的错误,说创建的数据库火表已经存在,前面的if Exists判断没起作用
      

  13.   

    你确定这里and前面不用加空格吗'T_CommandConfig'and
      

  14.   

    还有,你根本没判断数据库是否存在啊,只判断这个表不存在,就执行了
    create database CommandConfig
    ????
    表不存在跟创建数据库有什么关系
      

  15.   

    我是这样想的,判断这个表是否存在,如果不存在这个表,那么我就创一个新的数据库,然后再把这个表创建到这个数据库里
    那个and前面原本是有空格的,后来我改的,不过结果都一样,不行
      

  16.   

    数据库已经存在,你可以判断数据库是否存在 如果存在 drop database 然后 创建
      

  17.   

    我是这样想的,判断这个表是否存在,如果不存在这个表,那么我就创一个新的数据库,然后再把这个表创建到这个数据库里
    那个and前面原本是有空格的,后来我改的,不过结果都一样,不行
    什么逻辑
    如果现在的数据库不存在这个表,你可以直接在当前数据库下建表
    而如果你想在另外的数据库里建表,首先你就要判断另外的数据库是否存在,如果已经存在,还要再判断那个数据库是否有这个表
    你判断的跟你创建的东西根本都不一样
    那么很可能第一次能够正确执行,之后再执行就一定会出错
      

  18.   

    就好像,我判断D盘根目录下是否有1.txt
    如果没有,就创建个文件夹叫2,里面放个3.txt第一次创建成功,第二次还能执行吗?
      

  19.   

    而你把SQL语句放到SQL里执行,能执行,你也是只执行了一次吧
    你再执行一次看看,还不报错?
      

  20.   

    --Context查询到的是这样的  但是无法运行 报出 找不到CommandConfig
    if not Exists(select * from sysobjects where name='T_CommandConfig' and xtype='U')
    begin
    create database CommandConfig
    create table CommandConfig.dbo.T_CommandConfig(CODE varchar(30),ADDRESS varchar(30),COM varchar(30))
    end--改这样就没问题了
    create database CommandConfig
    go
    if not Exists(select * from sysobjects where name='T_CommandConfig' and xtype='U')
    begin
    create table CommandConfig.dbo.T_CommandConfig(CODE varchar(30),ADDRESS varchar(30),COM varchar(30))
    end要先进行数据库是否存在判断
      

  21.   

    我是这样想的,判断这个表是否存在,如果不存在这个表,那么我就创一个新的数据库,然后再把这个表创建到这个数据库里
    那个and前面原本是有空格的,后来我改的,不过结果都一样,不行
    什么逻辑
    如果现在的数据库不存在这个表,你可以直接在当前数据库下建表
    而如果你想在另外的数据库里建表,首先你就要判断另外的数据库是否存在,如果已经存在,还要再判断那个数据库是否有这个表
    你判断的跟你创建的东西根本都不一样
    那么很可能第一次能够正确执行,之后再执行就一定会出错
    他第一次确实是创建了这个数据库跟表,按照你的意思确实是思路严谨,但是我这里不写只是因为他重复的几率几乎为零,我图省事就只判断表(PS:这个数据库只有我自己用),现在的问题那个if Exists 判断移到C#中执行不起作用了,我数据库里已经存在T_CommandConfig这个表了,但是他还是执行了创建这个表的语句。我想实现的功能很简单,就是程序启动的时候判断一下这个表存不存在,如果不存在则创建这个表,存在则不用处理。
      

  22.   

    现象确实是这样的,但是我加了if Exists判断了,我在数据库上运行能判断出表存不存在,但是移到C#中执行之后if Exists没有起到判断的作用了,不管表存不存在他都执行了创建。如果把数据库中的表删除了他能创建成功,但是我想要的效果就是先判断表存在不存在,不存在我才创建一个,存在了我则不执行创建
      

  23.   

    不是放到C#中没用了 而是确实就是没用的  不信你拿这个select * from sysobjects where name='dbo.T_CommandConfig' and xtype='U'去试试  查不到的
      

  24.   

    那就仔细检查你的connectionString,到底连接的是哪个库
      

  25.   

    或者你像27楼给出的代码那样
    dbo.T_CommandConfig
    把用户名带上,否则默认是检查你连接的用户下是否有这个表,如果其他用户下有这个表,你还是检测不到
      

  26.   

    刚才试了一下确实是,用select * from master.dbo.sysdatabases where name='CommandConfig' 能查到结果,
    但是用if not Exists(select * from sysobjects where name='T_CommandConfig'and xtype='U'查不到结果,但是数据库CommandConfig中不是已经存在这个表了吗,为什么查不到呢
    这是那个连接配置connectionString="server=127.0.0.1; uid=sa;password=Dong201127012"/>
      

  27.   

    能够实现判断功能了,非常感谢两位的帮忙
    稍微总结一下问题所在:最主要的原因在于查询表存不存在时没有指明数据库,所以一直查不到结果,也就一直执行后面的创建语句。
    附上最后的代码,仅供参考
    SqlConnection conn = new SqlConnection(connectionString);
                     conn.Open();
                     SqlCommand cmd = conn.CreateCommand();              
                     cmd.CommandText = @"if not Exists(select * from master.dbo.sysdatabases where name='CommandConfig')
                                        begin
                                        create database CommandConfig
                                        end";
                      cmd.ExecuteNonQuery();
                      cmd.CommandText = @"if not Exists(select * from CommandConfig.sys.sysobjects where name='T_CommandConfig'and xtype='U')
                                        begin
                                        create table CommandConfig.dbo.T_CommandConfig(CODE varchar(30),ADDRESS varchar(30),COM varchar(30),BUTERATE varchar(30),PROTOCOL varchar(30),PARITY varchar(30),TYPE varchar(30))
                                        end
                                        if not Exists(select * from CommandConfig.sys.sysobjects where name='T_datagather'and xtype='U')
                                        begin
                                        create table CommandConfig.dbo.T_datagather(DEVICE varchar(30),DATA float,TIME datetime)
                                        end";
                     
                     cmd.ExecuteNonQuery();               
                     conn.Close();
      

  28.   

    呵呵             kankan  o