2011-04-05 36 views
0

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

+1

你能提供有关情况的详细信息的示例数据类型的变量?现在很难确定你在问什么。 – marcind 2011-04-05 14:05:01

回答

2

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

你可以建立的SqlParameter对象的集合,代表您的参数和功能来运行的SqlCommand填充DataSet,例如。

你可以用两个函数来实现这个功能,一个函数建立一个SqlParameters列表,它为每个参数调用一次以将其添加到列表中,另一个函数使用该列表和存储过程的名称等并运行存储过程。

如果你只是做这一个关闭这些功能可能是一些开销,所以我也已经所示的例子做这一切功能于一体。

在我的例子下面我展示了如何返回一个数据集,但你可以使用cmdt.ExecuteNonQuery(),而不是作为独立的例子。


一个辅助功能,以 “构建” 一个参数列表:

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; 
} 

然后调用像这样:

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); 
} 

来运行存储过程中的功能 公众的SqlConnection的MySqlConnection = new SqlConnection(“Database = MyDB; SERVER = MyServer; Failover Partner = MyServer2; UID = MyID; PWD = MyPassword”); List para = new List(); BuildSqlParameter( “@参数名称”,SqlDbType.VarChar, 的parameterValue,ParameterDirection.Input,参考第); 数据集本地= GetStoredProcedureWithParameters(的MySqlConnection, “MyStoredProcedureName”,第);

其中:

  • 的MySqlConnection是的SqlConnection(在本例中为完整的定义)
  • MYDB是你的数据库的名称
  • 的MyServer是服务器的名称
  • MyServer2是故障转移服务器(非必要)
  • 身份识别码的名字是你的SQL Server的用户名
  • MyPassword输入你的SQL服务器密码
  • “@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是第二个参数
+0

对不起,不得不downvote,但这并不回答这个问题,不完全清楚,代码不是如何调用SP的最佳示例。 – Jaymz 2011-04-05 15:37:52

+0

我不同意,问题是“执行需要参数的存储过程” - 这就是代码的作用。 我会添加更多关于它在做什么的描述。 如果您不同意如何调用SP,您能否提供更好的示例? – PCurd 2011-04-05 15:41:28

+1

您提供的代码示例提供了一个名为ClearOrderToggle的方法,该方法对OP没有意义,参数RepRef对我们也没有任何意义,变量MySQLConnection没有定义或解释,一个循环多次调用'cmdt.Parameters.Add',而不是调用'cmdt.Parameters.AddRange',以及其他一些误导/混乱的例子。 – Jaymz 2011-04-05 15:46:32