请教大侠怎么用ADO.net获得这个存储过程返回的结果集?

xiaowu_li 2011-02-16 12:48:56
我想用sp_helpconstraint这个存储过程获得一个表中的约束,可是我用下面的代码怎么都不能返回正确的结果集。
SqlConnection con=new SqlConnection(.....);
SqLCommand cmd=new SqlCommand();
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="sp_helpconstraint";

//表名
SqlParameter TableName=New SqlParameter("@objname",SqlDbType.NVarChar,50);
TableName.Direction=ParameterDirection.Input;
TableName.Value="表1";
cmd.Parameters.Add(TableName);
using(con)
{
con.open();
using(SqlDataReader dr=cmd.ExecuteReader())
{
while(dr.Read())
{
string str=dr[0].ToString();
}
}
}
语法上没有任何错误,但是的不多结果集,请问在哪里出现了错误!

请教应该怎么写才是正确的:
...全文
283 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowu_li 2011-02-17
  • 打赏
  • 举报
回复
谢谢,各位大侠,这种存储过程方法似乎有点问题,针对我这个问题,我用别的方法解决了
具体的SQL是这样的:

删除某字段的约束
declare @name varchar(100)
--DF为约束名称前缀
select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'
--删除约束
alter table 表名 drop constraint @name

结贴!
So_CooL 2011-02-17
  • 打赏
  • 举报
回复
string connectionstring = "";
SqlConnection conn = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand();
conn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_helpconstraint";
cmd.Connection = conn;
cmd.Parameters.Add("@objname", SqlDbType.VarChar, 50).Value = "表1";
cmd.Parameters.Add("@returnValue", SqlDbType.VarChar);
cmd.Parameters["@returnValue"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
return cmd.Parameters["@returnValue"].Value;
wulg10 2011-02-17
  • 打赏
  • 举报
回复
lz参考楼上几位的方法
wulg10 2011-02-17
  • 打赏
  • 举报
回复
首先判断存储过程是否执行成功
第二判断程序调用的存储过程方法是否正确。
yzf86211861 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 alan_219_2008 的回复:]

给你参考下
SQL code

CREATE PROCEDURE sp_AccountRole_Create
@CategoryID int,
@RoleName nvarchar(10),
@Description nvarchar(50),
@RoleID int output
AS
DECLARE @Count int

-- 查找是否有相同名称的记录
SELE……
[/Quote]
+1
Snowdust 2011-02-16
  • 打赏
  • 举报
回复
string ConnectionString = "......";
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_helpconstraint";
cmd.Connection = con;

//表名
SqlParameter TableName = new SqlParameter("@objname", SqlDbType.NVarChar, 50);
TableName.Direction = ParameterDirection.Input;
TableName.Value = "表1";
cmd.Parameters.Add(TableName);
using (con)
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new System.Data.DataSet();
da.Fill(ds);
}

获取的结果在ds中。
laowang134 2011-02-16
  • 打赏
  • 举报
回复
你的存储过程呢!~。
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
上述语法上没有任何错误,但是得不到结果集,请问在哪里出现了错误!
请教正确的写法,
谢谢
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
wuyq11(人生如梦) !
临时表
select object_name(constid), text from sysconstraints a, syscomments b where a.id = object_id('abc') and a.constid=b.id
怎么使用?不太明白,能再详细些吗?
谢谢!
也谢谢alan_219_2008(NewCoder)
wuyq11 2011-02-16
  • 打赏
  • 举报
回复
USE pubs
EXEC sp_helpconstraint Products
临时表
select object_name(constid), text from sysconstraints a, syscomments b where a.id = object_id('abc') and a.constid=b.id

http://msdn.microsoft.com/en-us/library/aa224827(v=sql.80).aspx
alan_219_2008 2011-02-16
  • 打赏
  • 举报
回复
给你参考下

CREATE PROCEDURE sp_AccountRole_Create
@CategoryID int,
@RoleName nvarchar(10),
@Description nvarchar(50),
@RoleID int output
AS
DECLARE @Count int

-- 查找是否有相同名称的记录
SELECT @Count = Count(RoleID) FROM Account_Role WHERE
RoleName = @RoleName

IF @Count = 0

INSERT INTO Account_Role
(CategoryID, RoleName, Description) valueS
(@CategoryID, @RoleName, @Description)

SET @RoleID = @@IDENTITY

RETURN 1
GO


下面是后台调用的

SqlConnection DbConnection = new SqlConnection(mConnectionString);
SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );
DbConnection.Open(connectString);
// 废置SqlCommand的属性为存储过程
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);
command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);
command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
command.Parameters.Add("@RoleID", SqlDbType.Int, 4);
// 返回值
command.Parameters.Add("Returnvalue",
SqlDbType.Int,
4, // Size
ParameterDirection.Returnvalue,
false, // is nullable
0, // byte precision
0, // byte scale
string.Empty,
DataRowVersion.Default,
null );

command.parameters["@CategoryID"].value = permission.CategoryID;
command.parameters["@RoleName"].value = permission.PermissionName;
command.parameters["@Description"].value = permission.Description;
// 可以返回新的ID值
command.parameters["@RoleID"].Direction = ParameterDirection.Output;

int rowsAffected = command.ExecuteNonQuery();
int result = command.parameters["Returnvalue"].value;
int newID = command.parameters["@RoleID"].value


可以得到三个值,分别是行影响值,存储过程返回值,新的ID值。
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
利用SqlDataReader得到的dr只有一行一列,是表名这个结果,
利用SqlDataAdapter得到的结果相同,也是一行一列

这个存储过程是列出表的约束结果集的,现在就是不知道代码怎么写能得到这个约束结果集
谢谢!
yangyalin8425 2011-02-16
  • 打赏
  • 举报
回复
你说能得到第一个的话把他改成string str=dr[1].ToString();不行吗
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
我现在是希望得到返回的结果中的
constraint_type, constraint_name, delete_action...
DEFAULT ON column 列1, DF_表1_列1, (n/a) ...
DEFAULT ON column 列2, DF_表1_列2,(n/a) ...
这些内容,
现在看好像只能得到第一个结果
Object_Name
表1

谢谢!

xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
谢谢!
在SQL 查询分析器里执行sp_helpconstraint的结果:
sp_helpconstraint 表1

结果返回两个
一个是Object_Name
表1
另一个constraint_type constraint_name delete_action...
DEFAULT ON column 列1 DF_表1_列1 (n/a) ...
DEFAULT ON column 列2 DF_表1_列2 (n/a) ...


yangyalin8425 2011-02-16
  • 打赏
  • 举报
回复
数据库有结果应该可以的,你把数据库的执行结果贴上来看下
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
我在SQL Server的查询分析器里,执行这个存储过程sp_helpconstraint,结果返回了表1的很多约束关系,但是利用程序编程时,就遇到了问题,不知道怎么得到这些结果。
请大侠帮助,谢谢!
天下在我心 2011-02-16
  • 打赏
  • 举报
回复
数据库执行下这个存储过程,有结果返回就能接收。
xiaowu_li 2011-02-16
  • 打赏
  • 举报
回复
谢谢各位大侠,我用的存储过程是sp_helpconstraint
定义是这样的:
sp_helpconstraint
返回一个列表,其内容包括所有约束类型、约束类型的用户定义或系统提供的名称、定义约束类型时用到的列,以及定义约束的表达式(仅适用于 DEFAULT 和 CHECK 约束)。

语法
sp_helpconstraint [ @objname = ] 'table'
[ , [ @nomsg = ] 'no_message' ]

参数
[@objname =] 'table'

返回其约束信息的表。指定的表对于当前数据库必须是本地的。table 的数据类型为 nvarchar(776),无默认值。

[@nomsg =] 'no_message'

是打印表名的可选参数。no_message 的数据类型为 varchar(5),默认值为 msg。nomsg 表示取消打印。

返回代码值
0(成功)或 1(失败)

结果集
如果 sp_helpconstraint 参与到主键中,则它显示按降序索引的列。降序索引列将在结果集中列出,在其名称后带有减号 (-)。默认值(升序索引列)将仅按名称列出。


因为这个存储过程的结果集是一个表的约束集,现在我想获得这个约束集,不知道利用ado.net怎么获得。
谢谢!
上述3楼的方法,我试了,也不行。
huangwenquan123 2011-02-16
  • 打赏
  • 举报
回复

string str="";
using(SqlDataReader dr=cmd.ExecuteReader())
{
while(dr.Read())
{
str+=dr[0].ToString();
}
}
Response.Writer(str)
//你的存储过程怎么写的?先输出看下str
加载更多回复(2)
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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