我非常了解SQL语句,例如select,insert,update和delete。不过,我对存储过程很陌生。SQL中的存储过程
我正在使用SQL Management Studio Express。
任何示例代码?例如,注册,一种将客户数据保存在数据库中的存储过程。
我非常了解SQL语句,例如select,insert,update和delete。不过,我对存储过程很陌生。SQL中的存储过程
我正在使用SQL Management Studio Express。
任何示例代码?例如,注册,一种将客户数据保存在数据库中的存储过程。
有关使用优先存储过程嵌入式SQL的最好的事情正确的做法是,它们向独立于客户端代码的数据库提供可版本化的接口。它从客户端代码库中获取SQL,这意味着只要外部接口不会改变:参数,结果集等,DBA就可以自由地调整查询,甚至完全重新编码数据库模式,而无需更改客户端软件。
它也极大地简化了安全性。客户不需要授予基础表本身的权限。所有他们需要的是grant execute
上的存储过程。
如果你只是写一个存储过程来包装简单的插入/更新/删除语句,那么你并没有太多的成就。存储过程应该代表更多逻辑操作。请记住,任何真实的数据库将长期存在用于访问它的软件。数据是永恒的;软件是暂时的。
不错的文章here解释如何避免SQL注入攻击。阅读添加注意事项。
把它的simpliest方式是paramaterise您所有的疑问像下面
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet userDataset = new DataSet();
SqlDataAdapter myCommand = new SqlDataAdapter(
"LoginStoredProcedure", connection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11);
myCommand.SelectCommand.Parameters["@au_id"].Value = SSN.Text;
myCommand.Fill(userDataset);
}
你可以使用parameterized queries避免SQL注入 - 存储过程是不是唯一的方式。
这里有一个例子,你要求:
CREATE PROCEDURE MyTeste(@MyParam INT)
AS BEGIN
SELECT * FROM MyTable WHERE CodTable = @MyParam;
END;
要经过5作为参数,另一个位置调用它,这样做:
EXEC MyTeste 5;
在那里有问题吗?提示 - 如果你的“问题”中没有任何问号'?',可能不清楚你在问什么:) – JNK 2011-05-19 18:37:53