c# SqlConnection 执行复杂的sql语句出错

问题描述

c#执行如下语句,出错。无论用nonqueryexcute还是readerexcute都不行stringstrSql=@"declare@typechardeclare@idbigintset@id=selectmax(Sid)fromStreamset@type=selectStreamTypefromStreamwhereSid=@idif@type='a'thenselectTalk.Talk,UserOfUp.Latitude,UserOfUp.LongtitudefromUserOfUp,Talk,StreamwhereUserOfUp.UserId=1andStream.StreamId=Talk.TalkIdandStream.Sid=@idend";

---------------------------------error:关键字'select'附近有语法错误。关键字'select'附近有语法错误。关键字'then'附近有语法错误。'end'附近有语法错误。

解决方案

解决方案二:
上面有点乱,改一下stringstrSql=@"declare@typechardeclare@idbigintset@id=selectmax(Sid)fromStreamset@type=selectStreamTypefromStreamwhereSid=@idif@type='a'thenselectTalk.Talk,UserOfUp.Latitude,UserOfUp.LongtitudefromUserOfUp,Talk,StreamwhereUserOfUp.UserId=1andStream.StreamId=Talk.TalkIdandStream.Sid=@idend";

解决方案三:
引用1楼jack2684的回复:

上面有点乱,改一下C#codestringstrSql=@"declare@typechardeclare@idbigintset@id=selectmax(Sid)fromStreamset@type=selectStreamTypefromStreamwhereSid=@idif@type='a'thensele……

你最好把它写成存储过程来执行
解决方案四:
这个应该就是sql语句的错误了,你在sqlserver里面先执行下试试
解决方案五:
if@type='a'selectTalk.Talk,UserOfUp.Latitude,UserOfUp.LongtitudefromUserOfUp,Talk,StreamwhereUserOfUp.UserId=1andStream.StreamId=Talk.TalkIdandStream.Sid=@id";//改成这样 不要thenend这个语法错误,LZ试下
解决方案六:
引用1楼jack2684的回复:

上面有点乱,改一下C#codestringstrSql=@"declare@typechardeclare@idbigintset@id=selectmax(Sid)fromStreamset@type=selectStreamTypefromStreamwhereSid=@idif@type='a'thensele……

在sql版回答了declare@typechardeclare@idbigintset@id=(selectmax(Sid)fromStream)set@type=(selectStreamTypefromStreamwhereSid=@id)if@type='a'then(selectTalk.Talk,UserOfUp.Latitude,UserOfUp.LongtitudefromUserOfUp,Talk,StreamwhereUserOfUp.UserId=1andStream.StreamId=Talk.TalkIdandStream.Sid=@id)end
解决方案七:
引用2楼chinajiyong的回复:

引用1楼jack2684的回复:上面有点乱,改一下C#codestringstrSql=@"declare@typechardeclare@idbigintset@id=selectmax(Sid)fromStreamset@type=selectStreamTypefromStreamwhereSid=@id……

同意,改成存储过程执行比较好。
解决方案八:
断点调试,看看你生成的SQL语句是什么,拿到数据库里执行,看看到底哪里出错了引用4楼rekym的回复:

if@type='a'selectTalk.Talk,UserOfUp.Latitude,UserOfUp.LongtitudefromUserOfUp,Talk,StreamwhereUserOfUp.UserId=1andStream.StreamId=Talk.TalkIdandStream.Sid=@id";//改成这样 不要then……

时间: 2024-10-04 00:33:20

c# SqlConnection 执行复杂的sql语句出错的相关文章

数据-sql语句出错,求大神帮忙解答

问题描述 sql语句出错,求大神帮忙解答 CREATE PROCEDURE test() BEGIN DECLARE fid int; DECLARE days int DEFAULT 1; DECLARE s int default 0; DECLARE company_code VARCHAR; DECLARE cursor_company CURSOR FOR SELECT company FROM test WHERE status = 3; DECLARE CONTINUE HANDL

MySQL开启记录执行过的SQL语句方法

  这篇文章主要介绍了MySQL开启记录执行过的SQL语句方法,配置的方法很简单,本文直接给出配置示例,需要的朋友可以参考下 概述 很多时候,我们需要知道 MySQL 执行过哪些 SQL 语句,比如 MySQL 被注入后,需要知道造成什么伤害等等.只要有 SQL 语句的记录,就能知道情况并作出对策.服务器是可以开启 MySQL 的 SQL 语句记录功能,从而就能间接地检测到客户端程序的行为. 方法 开启方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/l

Oracle查询最近执行过的SQL语句总结

一.查询最近执行过的SQL语句 select sql_text,last_load_time from v$sql order by last_load_time desc;   SELECT   sql_text, last_load_time FROM v$sql WHERE last_load_time IS NOT NULL and sql_text like 'select%' ORDER BY last_load_time DESC;   SELECT   sql_text, las

sql oracle-关于怎么快速执行10000条sql语句

问题描述 关于怎么快速执行10000条sql语句 由于我的数据库有几千万条数据,每一条查询都会花费0.5秒,但是10000条查询需要半个多小时,所以希望有快速一点的方法,求各位大神指点,下面是我的函数. /** * 这是一个横着的for循环,图的缩放级别是13,11*10方格,不同区域到不同区域的上车点数量 */ public static void CountListPointsOfOnetoOne() { ArrayList ListSql = new ArrayList(); double

ORACLE 查看有多个执行计划的SQL语句

在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一般意味着代码有问题或某些其它原因,例如,SQL语句使用绑定变量,但是绑定变量的类型或长度可能不一致会导致同一SQL出现不同执行计划. --查看数据库里面有多个执行计划的SQL语句的SQL_ID SELECT SQL_ID, COUNT(1) AS PLAN_NUM FROM V$SQL GROUP 

Oracle使用审计监控用户执行过的SQL语句

监控用户执行过的SQL语句,经常会使用查询V$SQL等视图,但这样查不出来多次执行相同的SQL语句,使用审计可以解决这个问题,这里采用精细审计某个用户的所有表. 用sys用户登记 创建下面的的过程 create or replace procedure auditUser(auditUser in varchar2,oper in int) is        policyName varchar2(2000);        policynum varchar2(20);        cur

nhibernate 获取执行过的sql语句(肯丢帮忙)

问题描述 大家帮忙,急啊我们老板要做系统日志,要求是记录用户操作执行的SQL语句,我不知道怎么获取执行过的SQL语句,请大家一定帮忙给个方案啊软件环境(asp.net+nhibernate+mysql) 解决方案 解决方案二:在程序模块中加入就行了和nhibernate没什么关系吧解决方案三:帮你顶解决方案四:nhibernate没有用过出个主意:执行sql语句的时候往日志表里查一行;嘿嘿曲线救国解决方案五:在数据层执行sql语句的地方,执行完了sql语句,顺便执行一下(insertinto日志

MySQL开启记录执行过的SQL语句方法_Mysql

概述 很多时候,我们需要知道 MySQL 执行过哪些 SQL 语句,比如 MySQL 被注入后,需要知道造成什么伤害等等.只要有 SQL 语句的记录,就能知道情况并作出对策.服务器是可以开启 MySQL 的 SQL 语句记录功能,从而就能间接地检测到客户端程序的行为. 方法 开启方法很简单:编辑/etc/my.cnf文件,在[mysqld]节下面添加:log=/var/lib/mysql/sql_row.log行(日志的路径自己根据需要定义). 复制代码 代码如下: [mysqld] datad

查询Oracle中正在执行和执行过的SQL语句_oracle

查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value 其它网友给出的正