簡體   English   中英

將字符串數組添加到SQL查詢

[英]Add string array to SQL query

我有一個包含標識符的字符串數組。 我想使用這些標識符從SQL獲取一些值。 有沒有一種將它們與字符串值添加到SqlCommand參數的方法?

我想創建一個查詢,如:

select CaseList from MasterReportData where Id = 1 OR Id = 2 OR Id = 3

這是我的C#代碼:

public static List<string> GetCaseList(string[] masterIdList)
    {

        try
        {
            string query = "  select CaseList from MasterReportData where @masterId";
            SqlConnection conn = new SqlConnection(connString);
            SqlCommand cmd = new SqlCommand(query, conn);
            cmd.Parameters.AddWithValue("masterId", ***);
            conn.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    list.Add(reader[0].ToString());
                }
            }
            conn.Close();
        }
        catch (Exception e)
        {
            var err= 0;
        }
        return list;
    }

您可以通過多種方法來執行此操作,但是我更喜歡創建可能值的臨時表。 這樣你可以做類似的事情

select CaseList from MasterReportData where Id IN(select Id from tempTable)

最好的方法(使用sql優化)將是:

創建您的類型:

CREATE TYPE dbo.IntTTV AS TABLE  
( Id int ) 

您的身份證:

var ids = new List<int>
{
  1,
  2,
  3,
}

創建一個架構:

var tableSchema = new List<SqlMetaData>(1)
{
  new SqlMetaData("Id", SqlDbType.Int) // I think it's Int
}.ToArray();

在C#中創建表

var table = ids
  .Select(i => 
  {
    var row = new SqlDataRecord(tableSchema);
    row.SetInt32(0, i);
    return row;
  })
  .ToList();

創建SQL參數

var parameter = new SqlParameter();
parameter.SqlDbType = SqlDbType.Structured;
parameter.ParameterName = "@Ids";
parameter.Value = table;
parameter.TypeName = "dbo.IntTTV";

var parameters = new SqlParameter[1]
{
  parameter
};

稍微更改您的查詢(這只是一個示例:)

string query = "select mrd.CaseList from MasterReportData mrd"
  + " inner join @ids i on mrd.Id = i.id";
    public static List<string> GetCaseList(string[] masterIdList)
    {
        List<string> list = new List<string>();
        try
        {
            string query = "select CaseList from MasterReportData where ";
            using (SqlConnection conn = new SqlConnection(connString))
            {
                int i = 0;
                SqlCommand cmd = new SqlCommand(query, conn);
                for(i = 0; i < masterIdList.Length; i++)
                {
                    var parm = "@ID" + i;
                    cmd.Parameters.Add(new SqlParameter(parm, masterIdList[i]));
                    query += (i > 0 ? " OR " : "") + " Id = " + parm;
                }
                cmd.CommandText = query;
                //cmd.Parameters.AddWithValue("masterId", ***);
                conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        list.Add(reader[0].ToString());
                    }
                }
            }
        }
        catch (Exception e)
        {
            e.ToString();
        }
        return list;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM