C# 怎么获取 SQL 返回的字符串

sinomac 2017-02-16 09:22:03
DECLARE @IsNum int	
Select @IsNum = Count(*) From [User] Where 1=1 AND Name = @Name
if(@IsNum IS NOT NULL and @IsNum > 0)
BEGIN
Raiserror ('已经存在相同名称的人员,请重新输入!',18,1)
return
END


我在C#中获取了返回的字符串,却不止我定义的:已经存在相同名称的人员,请重新输入!  这些字符串内容。后面还有
EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。

我只想取得我定义的字符串,不想看到SQL方面的身影,请问一下,要怎么处理? 
...全文
808 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_peng_yl 2017-02-19
  • 打赏
  • 举报
回复
你要是用Raiserror ('已经存在相同名称的人员,请重新输入!',18,1), 那没有办法,这种写法的产生,就是为了在数据库脚本层面去实现业务逻辑上的事 所以肯定会带一堆系统的东西,客户看了非常不友好 你可以 用 select '已经存在相同名称的人员,请重新输入!' 替换 Raiserror ('已经存在相同名称的人员,请重新输入!',18,1) 然后在代码上用 SqlCommand的 ExecuteScalar方法返回就可以了
  • 打赏
  • 举报
回复
对于某些小公司,程序员变通一下来应付过去,反正应付蒙一下领导和客户也能过去,是完全可能的。反正也就是这种要求不高的东西。 但是不要说“获取 SQL 返回的字符串”,应该说是你调用的 DAL 代码(也可能是你的同事写的几行代码,你看不懂,但是不是成熟 DAL 框架)有问题。如果说是 SQL 返回的字符串,那就蒙了自己了。
  • 打赏
  • 举报
回复
引用 9 楼 sinomac 的回复:
请问一下,对应的这个正则表达式如何写: 已经存在相同名称的人员,请重新输入!\r\nEXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 我只取\r\n前面的字符,这样不知道行不行。
不解决产生错误的 bug ,你只是想将字符串分割一下,那么你自己觉得“行了”就行了呗。
  • 打赏
  • 举报
回复
引用 6 楼 sinomac 的回复:
try { } catch (Exception E) { MessageBox.Show(E.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } 就是抛出异常这里,我想要的是: MessageBox.Show("已经存在相同名称的人员,请重新输入!") 但在存储过程 里我还有其它的 Raiserror ('你没有创建人员的权限!',18,1)
如果你不能贴出实际的调用数据库系统的代码,那么是无解的了。 这个扯不上 try...catch,而是你抛出 Exception 时、需要调试的那条代码是怎么写的。你在 try {....} 这里做了手脚,比如说你调用的某个很不好的“DAL封装”写了某种代码,才会在 E.Message 里边输出错误结果。如果能贴不出这个,那也就像你现在这样,硬说是“SQL 返回的字符串”而无法了解原因,不能去该改 bug 的地方去改而只能凑合截取一下字符串应付过去。
正怒月神 2017-02-17
  • 打赏
  • 举报
回复
一般方法就返回一个值。 根据这个值,你在代码里去写 '已经存在相同名称的人员,请重新输入!' 数据访问层方法只是单一的查询是否存在用户。 具体处理,是业务层的事情
sinomac 2017-02-17
  • 打赏
  • 举报
回复
现在实际得到的异常信息字符串是这样: 已经存在相同名称的人员,请重新输入! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 你没有创建人员的权限! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。
sinomac 2017-02-17
  • 打赏
  • 举报
回复
try { } catch (Exception E) { MessageBox.Show(E.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } 就是抛出异常这里,我想要的是: MessageBox.Show("已经存在相同名称的人员,请重新输入!") 但在存储过程 里我还有其它的 Raiserror ('你没有创建人员的权限!',18,1)
Poopaye 2017-02-17
  • 打赏
  • 举报
回复
引用 7 楼 sinomac 的回复:
现在实际得到的异常信息字符串是这样: 已经存在相同名称的人员,请重新输入! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 你没有创建人员的权限! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。
明显是第一个raiseerror之后没有完全返回
sinomac 2017-02-17
  • 打赏
  • 举报
回复
请问一下,对应的这个正则表达式如何写: 已经存在相同名称的人员,请重新输入!\r\nEXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 我只取\r\n前面的字符,这样不知道行不行。
  • 打赏
  • 举报
回复
引用 1 楼 sinomac 的回复:
就是说现在的内容是这样的: 已经存在相同名称的人员,请重新输入! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 而我实际要的字符就是我定义的: 已经存在相同名称的人员,请重新输入!
你的事务设计本身有问题。Exception 并不会把两个自己自动合并为一个,估计你是抄了2、3行你自己都看不懂的代码,然后来说人家 c# 有问题。
by_封爱 版主 2017-02-17
  • 打赏
  • 举报
回复
我一般都是这样定义.. 在proc中 返回一个single. 如果是1 表示成功.否则就是失败. 所以这地方你可以

select '已经存在相同名称的人员,请重新输入!' as msg;
然后在c#里判断就行了

var rs=执行proc(名字,参数)
if(rs!="1")
{
  alert(rs);
}
else
{
 alert("成功");
}
  • 打赏
  • 举报
回复
引用 1 楼 sinomac 的回复:
就是说现在的内容是这样的: 已经存在相同名称的人员,请重新输入! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 而我实际要的字符就是我定义的: 已经存在相同名称的人员,请重新输入!
你怎么写代码的?贴出来。 RaisError 你怎么可能当作“返回”呢?它向你的 c# 应用抛出 Exception,你只可能在 Exception.InnerException.Message 属性中获得。 贴出你的代码,你访问数据库的最基本方法,本身就不靠谱。
xdashewan 2017-02-17
  • 打赏
  • 举报
回复
程序里可以尝试用try catch捕获RAISERROR
sinomac 2017-02-16
  • 打赏
  • 举报
回复
就是说现在的内容是这样的: 已经存在相同名称的人员,请重新输入! EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配。上一计数=0,当前计数=1。 而我实际要的字符就是我定义的: 已经存在相同名称的人员,请重新输入!

110,537

社区成员

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

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

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