第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將 SqlParameters 的動(dòng)態(tài)數(shù)組傳遞到 SQL 字符串 IN 子句

將 SqlParameters 的動(dòng)態(tài)數(shù)組傳遞到 SQL 字符串 IN 子句

C#
www說 2022-07-10 16:28:21
我有一種方法可以編寫一個(gè)SqlCommand包含動(dòng)態(tài)參數(shù)列表的方法。我的挑戰(zhàn)是傳遞每個(gè)new SqlParameter (@Param0, value0), new sqlParameter (@Param1, value1)... 可能是另外 50 個(gè) SQL 參數(shù)。它可以作為硬編碼字符串傳遞,但可以sb.ToString()理解地傳遞將不起作用(因?yàn)槎禾?hào) - 它們是新參數(shù))。如何編寫循環(huán)或類似內(nèi)容以傳遞正確數(shù)量的新參數(shù)?到目前為止,我的嘗試如下:public ViewResult Index(int? ID){    using (var context = new Projects201819Context())       if (ID == null)       {           var sqlCommand = new SqlCommand();           // Array of item numbers - will change and can be longer/shorter, as required.           var SQL0 = "SELECT * FROM [database] WHERE material_id IN ({0})";           var idList = new List<int> { 11, 53, 125};           int[] idListArray = idList.ToArray();           var idParameterList = new List<string>();           var index = 0;           int IL = idList.Count;           // Create a SqlParameter for each element in the array called "@idParam0", "@idParam1"... and add to list idParameterList           foreach (var id in idList)           {               var paramName = "@idParam" + index;               sqlCommand.Parameters.AddWithValue(paramName, id);               idParameterList.Add(paramName);               index++;           }有 id 的地方很好,沒有給出(的 else 部分if (id == null))。關(guān)鍵是SPName- 這成功地將項(xiàng)目添加到newSPList列表中并string.join返回我需要的確切字符串(HELLO)但我不能將這個(gè)長(zhǎng)字符串作為單獨(dú)的參數(shù)傳遞 - 完全有道理 - 我只是不知道如何解決它!感謝您的支持!
查看完整描述

2 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

讓 SQL Server 完成所有骯臟的工作。像這樣的東西。


var SQL0 = "SELECT * FROM [database] WHERE material_id IN (select value from string_split('{0}',','))";


var idList = new List<int> { 11, 53, 125};

int[] idListArray = idList.ToArray();

sqlCommand.CommandText = String.Format(SQL0, string.Join(",", idListArray));

// now execute the command

編輯


更安全、更高效的方式。


var SQL0 = "SELECT * FROM [database] WHERE material_id IN (select value from string_split(@ids,','))";


var idList = new List<int> { 11, 53, 125};

int[] idListArray = idList.ToArray();

sqlCommand.CommandText = SQL0;

sqlCommand.Parameters.Add("@ids", SqlDbTypes.VarChar, -1).Value = string.Join(",", idListArray);

// now execute the command


查看完整回答
反對(duì) 回復(fù) 2022-07-10
?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

您不能以這種方式傳遞參數(shù)數(shù)組。EF6 中的SqlQuery有一個(gè)重載,它接受 SqlParameter 數(shù)組作為第二個(gè)參數(shù)。


你所要做的就是:


SqlParameter[] pms = sqlCommand.Parameters.Cast<SqlParameter>().ToArray();

var datainput = context.materials.SqlQuery(sqlCommand.CommandText, pms);

當(dāng)然,這也意味著您當(dāng)前的許多代碼是不必要的,您可以將其丟棄


例如,您可以在沒有僅用于存儲(chǔ)參數(shù)和命令文本的 SqlCommand 對(duì)象的情況下編寫此代碼。


var SQL0 = "SELECT * FROM [database] WHERE material_id IN ({0})";

var idList = new List<int> { 11, 53, 125 };

var idParameterList = new List<string>();

var pms = new List<SqlParameter>();

int count = 1;

foreach (var id in idList)

{

    var paramName = "@idParam" + count++;

    SqlParameter p = new SqlParameter(paramName, SqlDbType.Int);

    p.Value = id;

    pms.Add(p);

    idParameterList.Add(paramName);

}

string cmdText = String.Format(SQL0, string.Join(",", idParameterList));

var datainput = context.materials.SqlQuery(cmdText, pms);


查看完整回答
反對(duì) 回復(fù) 2022-07-10
  • 2 回答
  • 0 關(guān)注
  • 246 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)