Ошибка в коде C # - PullRequest
       34

Ошибка в коде C #

0 голосов
/ 11 ноября 2011
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();

Ответы [ 5 ]

4 голосов
/ 11 ноября 2011

Когда вы объявляете новый объект SqlParameter, вы на самом деле не связываете этот объект с cmd.Добавление ниже должно помочь:

cmd.Parameters.Add(parameters)
2 голосов
/ 11 ноября 2011

Вы должны добавить sqlparamerter в cmd.Parameters cmd.Parameters(new SqlParameter("Uid",value)); и не нужно писать CommandText.

0 голосов
/ 11 ноября 2011
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();
        }
    }

  }

Вы можете использовать этот класс

0 голосов
/ 11 ноября 2011

Кроме того факта, что вы не добавляете параметр обратно в команду, у вас также есть список строк в качестве значения параметра.Ваше наименование заставляет меня поверить, что каждый элемент в списке является параметром.Как сейчас выглядит ваш код, вы просто создаете один параметр (без имени).

Вы хотите что-то вроде этого (за исключением того, что мы не знаем имен параметров):

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

Если это не так, и вы хотите передать список строк в качестве значения для одного параметра, тогда этот вопрос более сложный, и вам нужно уточнить.

0 голосов
/ 11 ноября 2011
cmd.Parameters.Add( new SqlParameter { ... }).Value = Paramvalues;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...