Sql Parameter Collection - PullRequest
       22

Sql Parameter Collection

12 голосов
/ 08 января 2009

У меня есть 5 параметров, и я хочу отправить их методу:

public static SqlCommand getCommand(string procedure, SqlParameter[] parameter)
{
   Sqlcommand cmd;
   return cmd
}

Могу ли я отправить эти параметры одновременно, как это?

SqlParameterCollection prm;
prm.Add(p1);
prm.Add(p2);
prm.Add(p3);
prm.Add(p4);
prm.Add(p5);
sqlcommand cmd = getCommand(prm);

Ответы [ 7 ]

15 голосов
/ 08 января 2009

Или вручную создать массив параметров:

SqlParameter[] parameter = {
new SqlParameter(...), 
new SqlParameter(...), 
new SqlParameter(...)
};

Но я не понимаю, что должно быть не так с вашим подходом. Это просто, читабельно и недопустимо.

7 голосов
/ 08 января 2009

Не понимаю, что с этим не так? Вы знаете, что если это .NET, вам нужно присоединить параметры к объекту SqlCommand?

Итак:

SqlCommand query = new SqlCommand(sqlString, Connection);
query.Parameters.AddWithValue(parameter,valueToPass);

и т.д.

Извините, если это не связано, не совсем уверен в вашем вопросе? Ваш метод на самом деле ничего не делает, я полагаю, вы оставили код и просто вставили пустышку, чтобы задать вопрос? Вы можете передать массив в качестве аргумента, поэтому вам просто нужно его разложить?

6 голосов
/ 03 декабря 2012

Используя это в качестве вдохновения, этот код работал для меня:

List<SqlCeParameter> parameters = new List<SqlCeParameter>();

parameters.Add(new SqlCeParameter("@Username", NewUsername));
parameters.Add(new SqlCeParameter("@Password", Password));

cmd.Parameters.AddRange(parameters.ToArray());
2 голосов
/ 08 января 2009

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

1 голос
/ 29 апреля 2015

Вот мой код. Вы можете использовать все свойства параметров, такие как имя, значение, тип и т. Д.

int SelectedListID = 6;
string selectedPrefix = "IP";
string sqlQuery = "select * from callHistory where ImportID=@IMPORTID and Prefix=@PREFIX"

SqlParameter[] sParams = new SqlParameter[2]; // Parameter count

sParams[0] = new SqlParameter();
sParams[0].SqlDbType = SqlDbType.Int;
sParams[0].ParameterName = "@IMPORTID";
sParams[0].Value = SelectedListID;

sParams[1] = new SqlParameter();
sParams[1].SqlDbType = SqlDbType.VarChar;
sParams[1].ParameterName = "@PREFIX";
sParams[1].Value = selectedPrefix;


SqlCommand cmd = new SqlCommand(sqlQuery, sConnection);

if (sParams != null)
{
    foreach (SqlParameter sParam in sParams)
    {
        cmd.Parameters.Add(sParam);
        Application.DoEvents();
    }
}
0 голосов
/ 29 декабря 2017

1.

public IEnumerable<SqlParameter> GetAndSetParameters(List<Tuple<string, string>> parameters){
            List<SqlParameter> paramlist = new List<SqlParameter>();

            foreach (var item in parameters)
        {
            paramlist.Add(new SqlParameter(item.Item1, item.Item2));
        }
        return paramlist;
    }

2. передать параметры

 public List<Tuple<string, string>> GetUserParameter(){
        List<Tuple<string, string>> list = new List<Tuple<string, string>>();
                list.Add(new Tuple<string, string>("@User",user.UserID));
                   return list;
        }

3. наконец, используйте его:

 SqlCommand oCmd = new SqlCommand(oString, myConnection);
                oCmd.Parameters.AddRange(GetAndSetParameters(GetUserParameter()).ToArray());
0 голосов
/ 19 марта 2014

Form1.cs

    static private void FunctionCall()
    {

        string connectionString = "DATA Source=nwind;server=GRAPHICS\SQLEXPRESS;Persist Security Info=False;Integrated Security=SSPI;Connect Timeout=30";
        string sSqlQuery;

        DataSet ds;
        DataTable dt;

        // Prepare SQL Query
        sSqlQuery = @"
        select content " +
        "from " +
        "[TBL] where id = '000-000'";

        SqlParameter[] sqlParams = {
                new SqlParameter("",SqlDbType.Int), 
                new SqlParameter("",SqlDbType.VarChar), 
                new SqlParameter("",SqlDbType.VarChar)
        };

        // Read from database
        ds = SqlHelper.ExecuteNonQuery(connectionString, sSqlQuery, CommandType.Text, sqlParams);
        dt = ds.Tables[0];
     }

SqlHelper.cs

// Выполняет незапрашиваемый запрос

public static int ExecuteNonQuery (string connectionString, string cmdText, CommandType type, SqlParameter[] prms)
        {
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    cmd.CommandType = type;

                if (prms != null)
                {
                    foreach (SqlParameter p in prms)
                    {
                        cmd.Parameters.Add(p);
                    }
                }
                conn.Open();
                return cmd.ExecuteNonQuery();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...