Stored procedures SQL中的存储过程
我非常了解SQL语句,如select、insert、update和delete。但是,我对存储过程是新手 我正在使用SQL Management Studio Express 有代码示例吗?例如,注册,将客户数据保存在数据库中的存储过程 这篇文章解释了如何避免SQL注入攻击。阅读添加注意事项 最简单的方法是将所有查询参数化,如下所示Stored procedures SQL中的存储过程,stored-procedures,sql-server-express,Stored Procedures,Sql Server Express,我非常了解SQL语句,如select、insert、update和delete。但是,我对存储过程是新手 我正在使用SQL Management Studio Express 有代码示例吗?例如,注册,将客户数据保存在数据库中的存储过程 这篇文章解释了如何避免SQL注入攻击。阅读添加注意事项 最简单的方法是将所有查询参数化,如下所示 using (SqlConnection connection = new SqlConnection(connectionString)) { DataSet
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);
}
这篇文章很好,解释了如何避免SQL注入攻击。阅读添加注意事项
最简单的方法是将所有查询参数化,如下所示
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);
}
您可以使用来避免SQL注入-存储过程不是唯一的方法。您可以使用来避免SQL注入-存储过程不是唯一的方法。以下是您要求的示例:
CREATE PROCEDURE MyTeste(@MyParam INT)
AS BEGIN
SELECT * FROM MyTable WHERE CodTable = @MyParam;
END;
要从另一个位置调用它,将5作为参数传递,请执行以下操作:
EXEC MyTeste 5;
以下是您要求的示例:
CREATE PROCEDURE MyTeste(@MyParam INT)
AS BEGIN
SELECT * FROM MyTable WHERE CodTable = @MyParam;
END;
要从另一个位置调用它,将5作为参数传递,请执行以下操作:
EXEC MyTeste 5;
与嵌入式SQL相比,使用存储过程最好的一点是,如果操作得当,它们为数据库提供了一个独立于客户端代码的可版本化接口。它从客户机代码库中获取SQL,这意味着只要外部接口不改变:参数、结果集等,DBA就可以自由地调整查询,甚至完全重新构建数据库模式,而无需更改客户机软件 它还大大简化了安全性。客户端不需要向基础表本身授予权限。他们只需要在存储过程上执行
grant
如果您所做的只是编写一个存储过程来包装简单的insert/update/delete语句,那么您实际上并没有完成多少工作。存储过程应该表示更多的逻辑操作
记住,任何真正的数据库都会比用来访问它的软件长寿。数据是永恒的;软件是暂时的。与嵌入式SQL相比,使用存储过程最好的一点是,如果操作得当,它们为数据库提供了一个独立于客户端代码的可版本化接口。它从客户机代码库中获取SQL,这意味着只要外部接口不改变:参数、结果集等,DBA就可以自由地调整查询,甚至完全重新构建数据库模式,而无需更改客户机软件 它还大大简化了安全性。客户端不需要向基础表本身授予权限。他们只需要在存储过程上执行
grant
如果您所做的只是编写一个存储过程来包装简单的insert/update/delete语句,那么您实际上并没有完成多少工作。存储过程应该表示更多的逻辑操作
记住,任何真正的数据库都会比用来访问它的软件长寿。数据是永恒的;软件是暂时的。这里面有什么问题吗?提示-如果您的“问题”中没有任何问号
?
,则可能不清楚您在问什么:)有问题吗?提示-如果您的“问题”中没有任何问号?
,则可能不清楚您在问什么:)