zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

sqlserver存储过程动态参数调用实现代码

SQLServer存储代码 实现 参数 过程 动态 调用
2023-06-13 09:14:30 时间
只是做笔记,没什么!!
复制代码代码如下:

--创建测试表
CREATETABLE[dbo].[Student](
[ID][int]IDENTITY(1,1)NOTNULLPRIMARYKEY,
[Name][nvarchar](20)NOTNULLDEFAULT(""),
[Age][int]NOTNULLDEFAULT(0),
[Sex][bit]NOTNULLDEFAULT(0),
[Address][nvarchar](200)NOTNULLDEFAULT("")
)
--比如是一个查询存储过程
CreatePROCGetStudentByType
@typeint=0,--1根据id查询,2根据性别查询
@argsXML--参数都写到这里吧
AS
BEGIN
DECLARE@idINT,@sexBIT
SET@id=@args.value("(args/id)[1]","int")--参数都可以写在这里,如果没有传过来,大不了是null值了,反正也用不到,没关系的
SET@sex=@args.value("(args/sex)[1]","bit")
IF(@type=1)
BEGIN
SELECT*FROMdbo.StudentWHEREID=@id
END
IF(@type=2)
BEGIN
SELECT*FROMdbo.StudentWHERESex=@sex
END
END

参数写xml里感觉比用字符串要好很多,这样调用时参数就不好组织了,所以这里要有个帮助类XmlArgs
复制代码代码如下:

publicclassXmlArgs
{
privatestring_strArgs=string.Empty;
privatebool_isCreate=false;
privateDictionary<string,string>_args;
publicstringArgs
{
get
{
if(!_isCreate)
{
_strArgs=_CreateArgs();
_isCreate=true;
}
return_strArgs;
}
}
publicXmlArgs()
{
_args=newDictionary<string,string>();
}
publicvoidAdd(stringkey,objectvalue)
{
_args.Add(key,value.ToString());
_isCreate=false;
}
publicvoidRemove(stringkey)
{
_args.Remove(key);
_isCreate=false;
}
publicvoidClear()
{
_args.Clear();
_isCreate=false;
}
privatestring_CreateArgs()
{
if(_args.Count==0)
{
returnstring.Empty;
}
StringBuildersb=newStringBuilder();
foreach(stringkeyin_args.Keys)
{
sb.AppendFormat("<{0}>{1}</{0}>",key,_args[key]);
}
returnsb.ToString();
}
}

调用:
复制代码代码如下:
privatevoidBindData()
{
XmlArgsargs=newXmlArgs();
args.Add("id",1);
System.Data.DataTabledt=GetStudentByType(1,args);
GridView1.DataShow(dt);
}
privateSystem.Data.DataTableGetStudentByType(inttype,XmlArgsargs)
{
SqlHelperhelper=newSqlHelper();
helper.Params.Add("type",type);
helper.Params.Add("args",args.Args);
System.Data.DataTabledt=helper.RunDataTable("GetStudentByType");
returndt;
}