C#代码出错

时间:2011-11-11 09:01:29

标签: c# sql

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

当我传递包含两个参数loginuser的过程pwd的名称时,此代码会出错。虽然我使用列表添加参数但它没有传递给SP。在第cmd.ExecuteNonQuery();

中显示错误

5 个答案:

答案 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();
        }
    }

  }

您可以使用此课程