这种执行程序的方式对 SQL 注入是安全的吗?

Is this way to execute procedure is safe from SQL Injection?

来自 DAL 的示例代码:

我正在使用 C# 和 SQL SERVER 作为数据库。

我写了数据库对象的单例,和例子 从 mssql 执行过程的函数, 使用 DbCommand 和 Database-AddInParameter

我找到了讨论参数和 sql 注入的主题,但是 我想知道具体的方法

private Database m_db;
public Database getDB
{
      get
         {
            if(m_db == null)
                  m_db = DatabaseFactory.CreateDatabase("ConnectionString");
            return m_db;
         }
 }


public void Example(string Name)
{
    DbCommand dbcmd = getDB.GetStoredProcCommand("dbo.Example");
    getDB.AddInParameter(dbcmd, "p_Name", DbType.String, Name);
    getDB.ExecuteNonQuery(dbcmd);
}

谢谢

dbo.Example过程肯定仍然可以执行不安全的查询,例如:

create proc dbo.Example (@pName varchar(100))
as
    declare @cmd varchar(max);
    set @cmd = 'select Somedata from Sometable where Somecolumn = '+ @pName;
    exec (@cmd);

安全代码在查询中将 proc 参数完全用作参数

create proc dbo.Example (@pName varchar(100))
as
   select Somedata from Sometable where Somecolumn = @pName;