gpt4 book ai didi

c# - ADO.net 上的 SQL 查询限制为 2100+ 个参数

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:03 25 4
gpt4 key购买 nike

我正在尝试实现一个 ADO.NET 代码,该代码使用多个参数执行 SQL 查询。看起来 SQL 参数限制是 2100,并且不接受超过这个限制。我如何使用下面的代码来实现这个接受超过限制。

在验证有关如何以子集或 block 的形式发送查询以满足我的请求的在线文章时,我发现很难理解这些实现。

这是我的代码:

using (Connection = new SqlConnection(CS))
{
Connection.Open();

string query = "SELECT FamilyID, FullName, Alias FROM TABLE (nolock) WHERE FamilyID IN ({0})";

var stringBuiler = new StringBuilder();
var familyIds = new List<string>();

string line;

while ((line = TextFileReader.ReadLine()) != null)
{
line = line.Trim();

if (!familyIds.Contains(line) & !string.IsNullOrEmpty(line))
{
familyIds.Add(line);
}
}

var sqlCommand = new SqlCommand
{
Connection = Connection,
CommandType = CommandType.Text
};

var index = 0; // Reset the index
var idParameterList = new List<string>();

foreach (var familyId in familyIds)
{
var paramName = "@familyId" + index;
sqlCommand.Parameters.AddWithValue(paramName, familyId);
idParameterList.Add(paramName);
index++;
}

sqlCommand.CommandText = String.Format(query, string.Join(",", idParameterList));

var dt = new DataTable();

using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
{
dt.Load(sqlReader);
}

try
{
if (dt.Rows.Count > 0)
{
OutputdataGridView.DataSource = lstDownloadOwnerOutput;
OutputdataGridView.ColumnHeadersDefaultCellStyle.Font = new Font(DataGridView.DefaultFont, FontStyle.Bold);
OutputdataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
Gridviewdisplaylabel.Text = "Total no of rows: " + this.OutputdataGridView.Rows.Count.ToString();
}
else if (dt.Rows.Count == 0)
{
MessageBox.Show("Data returned blank!!!");
}
}
catch (Exception Ex)
{
if (Connection != null)
{
Connection.Close();
}
MessageBox.Show(Ex.Message);
}
}

最佳答案

WHERE IN 子句包含 2100 个甚至 100 个参数通常不是好的编码习惯。您可能需要考虑将这些值放入一个单独的真实表中,例如

families (ID int PK, ...)

然后,您可以将查询重写为:

SELECT FamilyID, FullName, Alias
FROM TABLE (nolock)
WHERE FamilyID IN (SELECT ID FROM families);

您也可以使用 EXISTS 子句或连接来表达上述内容,但这三种方法都可能只是优化到一个非常相似的查询计划。

关于c# - ADO.net 上的 SQL 查询限制为 2100+ 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54047626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com