简体   繁体   English

Sql参数集合

[英]Sql Parameter Collection

I have 5 parameters and I want to send them to the method: 我有5个参数,我想将它们发送给方法:

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

Can I send these paramters at one time like this? 我可以像这样一次发送这些参数吗?

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

Or create an array of parameters by hand: 或手动创建参数数组:

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

But I don't see what should be wrong with your approach. 但是我看不出您的方法应该有什么问题。 It simple, readable and understendable. 它简单,易读且易于理解。

I don't see what's wrong with that? 我看不出这是怎么回事? You do know that, if this is .NET, you need to attach the parameters to the SqlCommand object? 您确实知道,如果这是.NET,则需要将参数附加到SqlCommand对象吗?

So: 所以:

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

etc? 等等?

Sorry if that's not related, not completely sure on your question? 抱歉,如果没有关系,不确定您的问题吗? Your method doesn't really do anything, I take you left out the code and just put in a dummy for the purposes of asking the question? 您的方法实际上并没有执行任何操作,我带您省去了代码,只是为了回答问题而放入了虚拟对象? You can pass an array as an arguement so you just need to spilt it up? 您可以将数组作为争论,所以您只需要把它洒出来?

Using this as inspiration, this code worked for me: 以此为灵感,这段代码为我工作:

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

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

cmd.Parameters.AddRange(parameters.ToArray());

好吧,这不会编译,因为在对getCommand的调用中,您没有在过程中传递字符串,但是就数组而言,这应该没问题。

Here is my code.You can use all parameter properties like name,value,type etc. 这是我的代码。您可以使用所有参数属性,例如名称,值,类型等。

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

Form1.cs 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 SqlHelper.cs

// Executes a non query //执行非查询

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

1. 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. pass parameters 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. finally use it: 3.最后使用它:

 SqlCommand oCmd = new SqlCommand(oString, myConnection);
                oCmd.Parameters.AddRange(GetAndSetParameters(GetUserParameter()).ToArray());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM