2011-11-11 108 views
-4
public void ExecStoredProc(string strprocName, SqlConnection sqlConnect, List<string> Paramvalues) 
{ 
    if (ConnectToDB() == true) 
    { 
     SqlCommand cmd = new SqlCommand(strprocName, sqlConnect); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandText = strprocName; 

     SqlParameter parameters = new SqlParameter(); 
     parameters.Value = Paramvalues; 
     cmd.ExecuteNonQuery(); 
    } 
} 

,当我路过它有两个参数,userpwd程序login的名称,这个代码是给了一个错误。虽然我使用列表来添加参数,但它不会传递给SP。显示错误行cmd.ExecuteNonQuery();错误在C#代码

+3

什么错误? –

+4

你似乎没有对你声明的'parameters'变量做任何有用的事情。命令和参数之间没有关系。 –

+0

@Darin是的,这是关键。可以给出连接命令和参数的线。 – michelle

回答

4

在声明一个新的SqlParameter对象时,实际上并没有将该对象与cmd关联。添加下面的内容应该有所帮助:

cmd.Parameters.Add(parameters) 
0
cmd.Parameters.Add(new SqlParameter { ... }).Value = Paramvalues; 
2

您必须添加sqlparamerter到cmd.Parameters cmd.Parameters(new SqlParameter("Uid",value)); 并没有必要写CommandText

+0

参数是一个集合,而不是一个方法,因此它将是'cmd.Parameters.Add()'。你正确的说'CommandText'是多余的。 –

0

除了没有将参数添加回命令之外,还有一个字符串列表作为参数值。你的命名使我相信列表中的每一项都是一个参数。你的代码在这个时候的方式,你只是创建一个参数(没有名字)。

你想这样的事情(除了我们不知道的参数名称):

foreach(string value in ParamValues) 
{ 
    cmd.Parameters.AddWithValue(/*ParamName*/, value); 
} 

如果不是这种情况,你想传递一个字符串列表作为一个值为单个参数那么这个问题更复杂,你需要澄清。

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.SqlClient; 
using Model = ObjectLibrary.Model; 
using System.Configuration; 
using System.Collections; 
using System.Data; 


public class Base 
{ 
    protected ArrayList Parameter = new ArrayList(); 


    public DataTable FetchData(string spName) 
    { 
     //if you want to get it form app config else just hard code here 
     string connectionString = ConfigurationManager.AppSettings["ConnectionString"]; 
     return ConnectToSql(connectionString, spName); 
    } 
    protected void ClearParameter() 
    { 
     Parameter.Clear(); 
    } 
    protected void AddParameter(string parameterName, object value) 
    { 
     Parameter.Add(new SqlParameter(parameterName,value)); 
    } 

    private DataTable ConnectToSql(string connection, string spName) 
    { 
     System.Data.SqlClient.SqlConnection conn; 
     conn = new System.Data.SqlClient.SqlConnection(); 
     conn.ConnectionString = connection; 
     try 
     { 
      conn.Open(); 
      SqlCommand sqlCommand = new SqlCommand(spName, conn); 
      sqlCommand.CommandType = CommandType.StoredProcedure; 
      sqlCommand.Parameters.AddRange(Parameter.ToArray()); 
      SqlDataAdapter dataAdaptor = new SqlDataAdapter(sqlCommand); 
      DataTable dt = new DataTable(); 
      dataAdaptor.Fill(dt); 
      conn.Close(); 
      return dt; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

    } 

你可以使用这个类