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

lengcj 2012-02-20 03:17:02
代码

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语句自动排列成
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 "));
来比较判断插入是否成功。


谢谢大家
...全文
257 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
大肖 2014-03-26
  • 打赏
  • 举报
回复
帮忙砍砍这个咋的了 //根据SQL语句生成记录集 m_pRecordset.CreateInstance(__uuidof(Recordset)); _variant_t RecordsAffected; CString vSQL; vSQL.Format("SELECT * FROM 固定钻套 WHERE 孔径大于<'%f' and 孔径到>='%f'",m_DHole,m_DHole); m_pRecordset=m_pConnection->Execute(_bstr_t(vSQL),&RecordsAffected,adCmdText); if((m_pRecordset->adoBOF)&&(m_pRecordset->adoEOF)) { AfxMessageBox("没有满足条件的记录!"); m_pRecordset->Close(); return; }
lengcj 2012-02-21
  • 打赏
  • 举报
回复
谢谢大家

ruanwei1987 2012-02-21
  • 打赏
  • 举报
回复
ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。 忽略其他列或行
ExecuteNonQuery 对连接执行 Transact-SQL 语句并返回受影响的行数。
lengcj 2012-02-21
  • 打赏
  • 举报
回复
谢谢关注

我想还是语句以外的问题啊
lengcj 2012-02-21
  • 打赏
  • 举报
回复
谢谢关注

我想还是语句以外的问题啊
lengcj 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lengcj 的回复:]
谢谢大家
[/Quote]

谢谢关注,我想还是语句以外的问题。
i08kingdom 2012-02-20
  • 打赏
  • 举报
回复
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");
我也出现过这种问题
最后请教了论坛里的人,发现原因居然是字符串错误:兴许是单引号和双引号的错误
hywyjw 2012-02-20
  • 打赏
  • 举报
回复
你不会是更换数据库了吧,或者就是有约束条件没处理好,直接INSERT了
烟波钓 2012-02-20
  • 打赏
  • 举报
回复

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 +";
//把你的代码改成这样试试

lengcj 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yxy134 的回复:]
这个应该不是SQL语句的问题,你看下数据接口哪里没有设对?
[/Quote].


我也怀疑是其他问题造成的哟,记得就是win2003更新重启了一次
第二天就不行了。郁闷。

找不到原因才来万能的csdn求助哟。

风雪猛狼 2012-02-20
  • 打赏
  • 举报
回复
这个应该不是SQL语句的问题,你看下数据接口哪里没有设对?
风雪猛狼 2012-02-20
  • 打赏
  • 举报
回复
这里应该是不SQL的问题,你在其它问题上找找原因吧! 看下数据接口有没有什么问题!
lengcj 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
你的INSERT 语句,怎么只有字段没有插入的值啊
[/Quote]

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


select DiQu,ZhuangTai,4,'2012-2-18 10:00:00' FROM ClassLogLuRu 不是值吗?

补充 去掉select 前后的()在sql2005运行和检测都正常,就是
Convert.ToInt32(SqlHelper.ExecuteScalar(DBConn.ConnectionString, CommandType.Text, sqlshenhe))取不到值,不能进行判断是否插入成功。

谢谢
bdmh 2012-02-20
  • 打赏
  • 举报
回复
你的INSERT 语句,怎么只有字段没有插入的值啊

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧