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();
}
}
当我传递包含两个参数login
和user
的过程pwd
的名称时,此代码会出错。虽然我使用列表添加参数但它没有传递给SP。在第cmd.ExecuteNonQuery();
行
答案 0 :(得分:4)
在声明新的SqlParameter对象时,实际上并未将该对象与cmd关联。添加以下内容应该有所帮助:
cmd.Parameters.Add(parameters)
答案 1 :(得分:2)
您必须将sqlparamerter添加到cmd.Parameters
cmd.Parameters(new SqlParameter("Uid",value));
而且无需写CommandText
。
答案 2 :(得分:0)
cmd.Parameters.Add( new SqlParameter { ... }).Value = Paramvalues;
答案 3 :(得分:0)
除了您没有将参数添加回命令之外,您还有一个字符串列表作为参数值。您的命名使我相信列表中的每个项目都是参数。你的代码目前的方式,你只是创建一个参数(没有名字)。
你想要这样的东西(除了我们不知道参数名称):
foreach(string value in ParamValues)
{
cmd.Parameters.AddWithValue(/*ParamName*/, value);
}
如果不是这种情况,并且您希望将字符串列表作为单个参数的值传递,则此问题更复杂,您需要澄清。
答案 4 :(得分: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();
}
}
}
您可以使用此课程