Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures SQL中的存储过程_Stored Procedures_Sql Server Express - Fatal编程技术网

Stored procedures 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

我非常了解SQL语句,如select、insert、update和delete。但是,我对存储过程是新手

我正在使用SQL Management Studio Express

有代码示例吗?例如,注册,将客户数据保存在数据库中的存储过程

这篇文章解释了如何避免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注入攻击。阅读添加注意事项

最简单的方法是将所有查询参数化,如下所示

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语句,那么您实际上并没有完成多少工作。存储过程应该表示更多的逻辑操作


记住,任何真正的数据库都会比用来访问它的软件长寿。数据是永恒的;软件是暂时的。

这里面有什么问题吗?提示-如果您的“问题”中没有任何问号
,则可能不清楚您在问什么:)有问题吗?提示-如果您的“问题”中没有任何问号
,则可能不清楚您在问什么:)