在sql中传入参数

时间:2011-04-05 12:11:14

标签: c# sql-server asp.net-mvc-3

如何将C#中in属性的参数传递给sqlserver。 我必须执行一个存储过程,该过程需要属性中的参数。请让我知道我该怎么做.....

1 个答案:

答案 0 :(得分:2)

执行存储过程的一个选项是使用SqlCommand对象和SqlParameter对象。

例如,您可以构建一组SqlParameter对象来表示您的参数,以及一个运行SqlCommand来填充DataSet的函数。

你可以用两个函数来实现它,一个是构建一个SqlParameters列表的函数,你可以为每个参数调用一次以将它添加到列表中,另一个函数可以获取该列表和存储过程的名称等等。运行存储过程。

如果你只是这样做,这些功能可能会有点开销,所以我还展示了一个在一个函数中完成所有操作的例子。

在下面的示例中,我展示了如何返回DataSet,但您可以使用cmdt.ExecuteNonQuery(),就像在独立示例中一样。


“构建”参数列表的辅助函数:

private void BuildSqlParameter(string ParameterName, SqlDbType DBType, 
    string Value, ParameterDirection dir, ref List<SqlParameter> paras)
{
     SqlParameter temp;
     temp = new SqlParameter(ParameterName, DBType);
     temp.Value = Value;
     temp.Direction = dir;
     paras.Add(temp);
}

运行存储过程的函数:

private DataSet GetStoredProcedureWithParameters(SqlConnection SQLC, 
    string StoredProcedureName, List<SqlParameter> paras)
{
    SQLC.Open();
    SqlCommand cmdt = new SqlCommand(StoredProcedureName, WEL);
    cmdt.CommandType = CommandType.StoredProcedure;
    cmdt.Parameters.AddRange(paras.ToArray());
    SqlDataAdapter dat = new SqlDataAdapter(cmdt);
    DataSet dst = new DataSet();
    dat.Fill(dst);
    SQLC.Close();
    return dst;
}

然后像这样打电话: public SqlConnection MySQLConnection = new SqlConnection(“Database = MyDB; SERVER = MyServer; Failover Partner = MyServer2; UID = MyID; PWD = MyPassword”);     List para = new List();     BuildSqlParameter(“@ ParameterName”,SqlDbType.VarChar,         ParameterValue,ParameterDirection.Input,ref paras);     DataSet local = GetStoredProcedureWithParameters(MySQLConnection,         “MyStoredProcedureName”,para);

其中:

  • MySQLConnection是一个SqlConnection(在此示例中为完整性而定义)
  • MyDB是数据库的名称
  • MyServer是服务器的名称
  • MyServer2是故障转移服务器的名称(不是必需的)
  • MyID是您的SQL Server用户名
  • MyPassword是您的SQL Server密码
  • “@ ParameterName”是参数的名称
  • SqlDbType.VarChar是第二个参数
  • 的示例数据类型
  • ParameterValue是您希望传递给参数
  • 的变量
  • MyStoredProcedureName是您要运行的存储过程的名称

如果您需要多个参数,只需根据需要多次运行BuildSqlParameter。


或者,如果您只想要一些代码,请执行以下操作:

MySQLConnection.Open();
SqlCommand cmdt = new SqlCommand("MyStoredProcedureName", 
    MySQLConnection);
cmdt.CommandType = CommandType.StoredProcedure;
SqlParameter para = cmdt.Parameters.Add("@ParameterName", 
    System.Data.SqlDbType.VarChar);
para.Value = ParameterValue;
para.Direction = ParameterDirection.Input;
cmdt.ExecuteNonQuery();
MySQLConnection.Close();

要添加更多参数,请执行以下操作:

SqlParameter para2 = cmdt.Parameters.Add("@ParameterName2", 
System.Data.SqlDbType.VarChar);
para2.Value = ParameterValue2;
para2.Direction = ParameterDirection.Input;

其中:

  • “@ ParameterName2”是您的第二个参数
  • 的名称
  • ParameterValue2是您希望传递给第二个参数的变量
  • System.Data.SqlDbType.VarChar是第二个参数的示例数据类型