gpt4 book ai didi

c# - 为任何给定的 SQL Server 表选择除第一列以外的所有列

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

我在 C# 中有这段代码,但我需要它来选择除表的第一列(标识列)之外的所有列,这样当我将数据插入不同数据库中的相同表时,目标数据库分配自己的标识列值:

SqlCommand commandSourceData = new SqlCommand($"SELECT * FROM dbo.{tableName};", sourceConnection);
SqlDataReader reader = commandSourceData.ExecuteReader();

有办法吗?

最佳答案

如果你想为数据库中的每一列都使用一个通用的解决方案,你可以使用这种代码

public string GetColumnsWithoutIdentity(string tableName, SqlConnection con)
{
SqlDataAdapter da = new SqlDataAdapter($"SELECT * FROM dbo.{tableName} where 1=0", con);
DataTable dt = new DataTable();
da.FillSchema(dt, SchemaType.Source);
var cols = dt.Columns.Cast<DataColumn>().Where(x => !x.AutoIncrement).Select(x => x.ColumnName);
return string.Join(",", cols);
}

现在您可以使用返回的字符串来构建没有自增列的Sql语句。
请注意,此代码容易受到 Sql 注入(inject)攻击。您应该绝对确定用于构建第一个查询的 tableName 参数不是您的用户直接键入的。让它从预定义表的白名单(只读)中进行选择(这也不是 100% 安全的)

另一个缺点是您需要访问数据库两次。一次获取包含有关 AutoIncrement 列的信息的模式,然后一次填充数据表。

关于c# - 为任何给定的 SQL Server 表选择除第一列以外的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873282/

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