再问高手一个问题

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

数据访问都用 存储过程做

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

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

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

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

请大家给几个方案

谢谢了
...全文
157 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,271

社区成员

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

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

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

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