好的网站都是用存储过程的吗,而不是在代码里用SQL语句

可是我觉得用存储过程的加代码要多很多-------------------------------------------------------我看我的代码,比原来多多... 可是我觉得用存储过程的加 代码要多很多
-------------------------------------------------------
我看我的代码,比原来多多了(我加分了,帮忙解释一下)
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "proc_selectjiating";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter pa = new SqlParameter("@jiatingname", SqlDbType.VarChar);
SqlParameter pa1 = new SqlParameter("@mima",SqlDbType.VarChar);
pa.Direction = ParameterDirection.Input;
pa1.Direction = ParameterDirection.Input;
pa.Value = TextBox1.Text;
pa1.Value = TextBox1.Text;
da.SelectCommand.Parameters.Add(pa);
da.SelectCommand.Parameters.Add(pa1);
本来是由三四句代码的
-----------------
其实我的意思不是让你解释这段代码,我是想说用了存储过程,代码量多了那么多
展开
 我来答
zaijing23
2008-09-10
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
(1) 存储过程通过参数传递,安全性高,可防止注入式攻击.

(2) 查询的语句在存储过程里,与程序不相关,如果以后要修改程序或者数据库,都不会出现连锁反应,增加系统可扩展性.

(3) 网站执行查询的时候,只需要传递简单的参数就可以了,无论是代码优化上还是查询优化上都可以做到高效.

(4) 允许模块化编程,即,可以将一组查询写在一个过程里面,然后在程序里直接调用,而不必每次都写若干个语句来实现相应功能

===============================================
??

有些不明白......

怎么会加很多?

只需要改个名字就行了呀....

Example: =========这里是原来的代码

/// <summary>
/// 检查用户帐号状态
/// </summary>
/// <param name="logName">登录名称</param>
/// <returns>如果帐号已激活,返回true</returns>
private bool CheckAccouontState(string logName)
{
string sql = "select count(*) from TSR_PASSPORT where USR_NAME_MAIN=@loginName and USR_STATE='已激活'";
int num = 0;

SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add("@loginName", SqlDbType.VarChar, 100, "USR_NAME_MAIN").Value = logName;
cmd.Connection = con;
cmd.CommandText = sql;
try
{
con.Open();
num = Convert.ToInt16(cmd.ExecuteScalar());
}
catch (SqlException ex)
{
lblMsg.Text = ex.Message + ",错误编号:(6001)";
}
finally
{
con.Close();
con.Dispose();
cmd.Dispose();
}

if (num == 0)
{
return true;
}
else
{
return false;
}
}

=================== 修改成这样:

/// <summary>
/// 检查用户帐号状态
/// </summary>
/// <param name="logName">登录名称</param>
/// <returns>如果帐号已激活,返回true</returns>
private bool CheckAccouontState(string logName)
{
/************ SQL 语句就不用了....
string sql = "select count(*) from TSR_PASSPORT where USR_NAME_MAIN=@loginName and USR_STATE='已激活'";
***************/
int num = 0;

SqlConnection con = new SqlConnection(str);
SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add("@loginName", SqlDbType.VarChar, 100, "USR_NAME_MAIN").Value = logName;
cmd.Connection = con;
// cmd.CommandText = sql;
cmd.CommandText = "存储过程名";
cmd.CommandType = CommandType.StoredProcedure;
try
{
con.Open();
num = Convert.ToInt16(cmd.ExecuteScalar());
}
catch (SqlException ex)
{
lblMsg.Text = ex.Message + ",错误编号:(6001)";
}
finally
{
con.Close();
con.Dispose();
cmd.Dispose();
}

if (num == 0)
{
return true;
}
else
{
return false;
}
}
=======================================================
-------------------------------------------------------
我看我的代码,比原来多多了(我加分了,帮忙解释一下)
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "proc_selectjiating"; // 这里是存储过程名称
da.SelectCommand.CommandType = CommandType.StoredProcedure;// 这里指定command的类型是存储过程
/* 下面的两句是新增加两个参数(存储过程需要的参数) */
SqlParameter pa = new SqlParameter("@jiatingname", SqlDbType.VarChar);
SqlParameter pa1 = new SqlParameter("@mima",SqlDbType.VarChar);
/* 这里是指定参数是输入类型还是输出类型(默认是输入,所以可以省略) */
pa.Direction = ParameterDirection.Input;
pa1.Direction = ParameterDirection.Input;
/* 这里是分别指定两个参数的值(赋值) */
pa.Value = TextBox1.Text;
pa1.Value = TextBox1.Text;
/* 以下两句是将两个参数添加到 command 中 */
da.SelectCommand.Parameters.Add(pa);
da.SelectCommand.Parameters.Add(pa1);

========================================================
其实楼主的代码可以这样写的:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "proc_selectjiating";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.SqlParameter.Add("@jiatingname", SqlDbType.VarChar).Value=TextBox1.Text;
da.SelectCommand.SqlParameter.Add("@mima",SqlDbType.VarChar).Value=TextBox2.Text;
zhengliqiao
2008-09-09 · 超过16用户采纳过TA的回答
知道答主
回答量:123
采纳率:0%
帮助的人:58.1万
展开全部
你首先要明白存储过程是干什么用的,为什么要用存储过程。
对于大型的用户较多的,数据访问较频繁的服务器,当然是要用存储过程了,为什么?因为这样可以进行重复操作,而且大大节省资源,设想如果1000万个用户,或者一个用户要用繁琐的SQL命令到服务器执行大量数据,服务器还不要崩溃吗。这就是用存储过程的最明显的好处。其次,不是所有用户都需要数据库权限,所以存储过程样可以完成操作,但是不用担心权限问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
walker333
2008-09-05 · 超过16用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:0
展开全部
很少有,因为存储过程有太多优势让我们值得使用。而直接用sql,则面临维护困难,代码混乱等问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
摔跤吧蚂蚁
2008-09-05 · TA获得超过688个赞
知道小有建树答主
回答量:418
采纳率:100%
帮助的人:183万
展开全部
就相当于模块思路 ,便于更改和维护
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
phiree
2008-09-05 · 超过28用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:99.5万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
PAul_Wong
2008-09-08 · TA获得超过260个赞
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:190万
展开全部
对呗!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式