再问高手一个问题

2003rainbow 2004-08-02 10:40:36
现在流行数据层和业务层分离

数据访问都用 存储过程做

比如一些复杂的查询,需要一些条件,比如,姓名 年龄 性别 住址 等等

还有不定排序,比如要看情况按照 ID,Name...排序

通常我们都是放在前台把sql语句拼写好了再传给sqlserver去处理

如果要写成存储过程 应该如何处理呢?

请大家给几个方案

谢谢了
...全文
115 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
goody9807 2004-08-03
  • 打赏
  • 举报
回复
2003rainbow(111)

你还没明白我的意思 参数传递不是通过拼sql语句作的 所以不会涉及

“[比如你的参数里面有查询字符串,里面包括"'"(单引号)

如果不处理,会出错的]”

通过这个语句加进去的 ,你只需给表示层的对象复值就可以的 ,现在我正用这个做的
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
2003rainbow 2004-08-03
  • 打赏
  • 举报
回复
to wnlovezxm(大垃圾人)

如果不拼接应该怎么写呢

因为我可能根据条件取舍,比如 姓名=* 我就不加姓名条件的判断了

cnlamar 2004-08-02
  • 打赏
  • 举报
回复
复杂的还是用拼接比较好
goody9807 2004-08-02
  • 打赏
  • 举报
回复
/// Create command object used to call stored procedure.
/// </summary>
/// <param name="procName">Name of stored procedure.</param>
/// <param name="prams">Params to stored procedure.</param>
/// <returns>Command object.</returns>
private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
// make sure connection is open
Open();

//command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
SqlCommand cmd = new SqlCommand(procName, con);
cmd.CommandType = CommandType.StoredProcedure;

// add proc parameters
if (prams != null) {
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}

// return param
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));

return cmd;
}
goody9807 2004-08-02
  • 打赏
  • 举报
回复
现在 我们正是按这种方式 开发 给你几个 方法

public SqlDataReader RunProcDR(string procName)
{
SqlCommand cmd = CreateCommand(procName, null);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}

/// <summary>
/// Run stored procedure,have params,return DataReader.
/// </summary>
/// <param name="procName">Name of stored procedure.</param>
/// <param name="prams">Stored procedure params.</param>
/// <param name="dataReader">Return result of procedure.</param>
public SqlDataReader RunProcDR(string procName, SqlParameter[] prams) {
SqlCommand cmd = CreateCommand(procName, prams);
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
2003rainbow 2004-08-02
  • 打赏
  • 举报
回复
大家好像没有明白我的意思啊

我是说原来在外面拼写sql语句,传给server

现在外面不写sql语句了,直接调用存储过程

对于一些复杂条件,sql的拼写

都放在存储过程里面做,有什么好的解决方案

或者说你们有什么好方法

cnlamar 2004-08-02
  • 打赏
  • 举报
回复
记得区分@与其他的参数标记,在数据层根据不同的数据库加不同的标记传递过去
chNET 2004-08-02
  • 打赏
  • 举报
回复

如果用存储过程,那就灵活的设置几个变量参数...

gshope 2004-08-02
  • 打赏
  • 举报
回复
把你拼好的语句做为参数传个存储过程,在存储过程里面:
exec(@你的参数名)即可
寂寞风向标 2004-08-02
  • 打赏
  • 举报
回复
实例化一个Command
将存储过程名称付给Command的commandtype属性,剩下的一样
wnlovezxm 2004-08-02
  • 打赏
  • 举报
回复
多复杂都不要用拼接,除非你能100%防止sql恶意嵌套的发生。用param参数吧!.net的对它的支持很好的!
2003rainbow 2004-08-02
  • 打赏
  • 举报
回复
To goody9807


你的这个我知道啊,

可是有个问题啊,不知道你是如何处理的

比如你的参数里面有查询字符串,里面包括"'"(单引号)

如果不处理,会出错的

还有,对于复杂查询你是把参数都传到存储过程里面

然后拼写sql语句,再用exec执行的么?
2003rainbow 2004-08-02
  • 打赏
  • 举报
回复
To goody9807


你的这个我知道啊,

可是有个问题啊,不知道你是如何处理的

比如你的参数里面有查询字符串,里面包括"'"(单引号)

如果不处理,会出错的

还有,对于复杂你是把参数都传到存储过程里面

然后拼写sql语句,再用exec执行的么?

62,054

社区成员

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

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

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

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