使用SQLDataReader在C#中执行SQL Server查询时出现问题
发布时间:2020-12-15 19:44:06 所属栏目:百科 来源:网络整理
导读:我试图使用SqlDataReader在C#中执行查询,但是我从数据库收到一条错误消息,“””附近的语法不正确”. 我不确定我的SQL查询有什么问题.我可以在SQL Server Management Studio中完美地执行它. try{ SqlConnection thisConnection = new SqlConnection(); thisC
我试图使用SqlDataReader在C#中执行查询,但是我从数据库收到一条错误消息,“””附近的语法不正确”.
我不确定我的SQL查询有什么问题.我可以在SQL Server Management Studio中完美地执行它. try { SqlConnection thisConnection = new SqlConnection(); thisConnection.Open(); SqlCommand thisCommand = thisConnection.CreateCommand(); thisCommand.CommandText = "SELECT" +"db.name DBName," +"tl.request_session_id," +"wt.blocking_session_id," +"OBJECT_NAME(p.OBJECT_ID) BlockedObjectName," +"tl.resource_type," +"h1.TEXT AS RequestingText," +"h2.TEXT AS BlockingText," +"tl.request_mode" +"FROM sys.dm_tran_locks AS tl" +"INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id" +"INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address" +"INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id" +"INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id" +"INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id" +"CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1" +"CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2"; SqlDataReader thisReader = thisCommand.ExecuteReader(); while (thisReader.Read()) { Console.WriteLine("t{0}t{1}",thisReader["DBName"],thisReader["BlockedObjectName"]); } thisReader.Close(); thisConnection.Close(); } catch (SqlException e) { Console.WriteLine(e.Message); } 解决方法
在连接的某些行的末尾需要空格:
例如: +"tl.request_mode" +"FROM sys.dm_tran_locks AS tl" 将创建SQL ...tl.request_modeFROM sys.dm_tran_locks AS tl... 将其更改为 +"tl.request_mode " +"FROM sys.dm_tran_locks AS tl" 还有一些其他行具有相同的问题. 这是一个很好的例子,说明为什么在测试动态构建的SQL字符串时实际打印出连接字符串非常重要,而不是仅粘贴代码并编辑引号和符号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |