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

VS2005遇到的有点纠结的sql古怪问题,INSERT INTO select FROM 插入语句前天都正常现在不行。
代码
C# code

string sqlshenhe = "INSERT INTO ClassLog ( DiQu,ZhuangTai,ShenheId,ShenheShiJian)                         (select DiQu,ZhuangTai,4,'2012-2-18 10:00:00'  FROM  ClassLogLuRu   WHERE    ClassLogLuRu_id =" + id + ") ";

if (Convert.ToInt32(SqlHelper.ExecuteScalar(DBConn.ConnectionString, CommandType.Text, sqlshenhe)) > 0)
{
string sql = "delete from [ClassLogLuRu]  where ClassLogLuRu_id =" + id;
...................................
}


如上语句本来前天运行很正常。但今天就出问题。走不到{}内string sql =这句了,

调试查原因也查不清楚
于是在sql2005里直接去运行sql:点“验证sql句法”:结果:
“已针对数据源检查过sql语法”
然后出来个“查询定义不同”的提示框,内容“分析sql窗格的内容时发生下列错误”
“列列表错误: 无法识别“SELECT”。
列列表错误: 无法识别“4”。
列列表错误: 无法识别“2012-2-18 10:00:00”。
INSERT 语句错误。
无法分析查询文本。”
再关系图窗格和条件窗格中无法用图形方式表示查询
忽略 撤销

以上......................
点忽略后,sql语句自动排列成
SQL code
INSERT INTO ClassLog
                      (DiQu, ZhuangTai, ShenheId, ShenheShiJian) (SELECT     DiQu, ZhuangTai, 4, '2012-2-18 10:00:00'
                                                                                                                         FROM          ClassLogLuRu
                                                                                                                         WHERE      ClassLogLuRu_id = 701)


再点“验证sql句法”:结果:
“已针对数据源检查过sql语法”后什么都没出来,



原始语句直接运行,能成功执行插入,就是不能正常返回结果。
纠结的是前天都是正常的,现在为什么不行了?
结果只有用

int id1 = Convert.ToInt32(SqlHelper.ExecuteScalar(DBConn.ConnectionString, CommandType.Text, "select max(ClassLog_id) from ClassLog "));
来比较判断插入是否成功。


谢谢大家


------解决方案--------------------
这里应该是不SQL的问题,你在其它问题上找找原因吧! 看下数据接口有没有什么问题!
------解决方案--------------------
C# code

string sqlshenhe = @"INSERT INTO ClassLog ( DiQu,ZhuangTai,ShenheId,ShenheShiJian) select DiQu,ZhuangTai,4,'2012-2-18 10:00:00'  FROM  ClassLogLuRu   WHERE    ClassLogLuRu_id ="+id +";
//把你的代码改成这样试试

------解决方案--------------------
string sqlshenhe = @"INSERT INTO ClassLog ( DiQu,ZhuangTai,ShenheId,ShenheShiJian) select DiQu,ZhuangTai,4,'2012-2-18 10:00:00' FROM ClassLogLuRu WHERE ClassLogLuRu_id ="+id +";
改成这样试试:string sqlshenhe = string.Forma("INSERT INTO ClassLog ( DiQu,ZhuangTai,ShenheId,ShenheShiJian) select DiQu,ZhuangTai,4,{0} FROM ClassLogLuRu WHERE ClassLogLuRu_id ="+id +","2012-2-18 10:00:00");
我也出现过这种问题
最后请教了论坛里的人,发现原因居然是字符串错误:兴许是单引号和双引号的错误
------解决方案--------------------
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行
ExecuteNonQuery 对连接执行 Transact-SQL 语句并返回受影响的行数。