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 语句并返回受影响的行数。