我已经使用下一个select命令在我的数据集上创建了一个tableadapter
select count(*) as cuenta from table1.但是,在运行时,我需要用不同数量的子句组成不同的selects。我想使用相同的tableadapter,但我无法更改select命令。
这是我的问题的一个小例子:
DataSource“ds”上数据适配器"EXISTE“的原始select命令:
select 1 as cuenta(*)在设计器上,我拖放数据适配器以在窗体上创建一个实例:"EXISTE1“
代码:
EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Fill(ds.EXISTE);但它总是返回"1“作为结果,而不是2255。
如何在不创建新的Fill函数的情况下运行其他命令?
诚挚的问候
发布于 2020-05-10 17:42:56
此问题的解决方案是从适配器而不是TableAdapter填充数据集。这对我来说工作得很好。
EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Adapter.Fill(ds.EXISTE);发布于 2020-09-16 13:35:57
您应该通过在设计器中右键单击tableadapter并选择"add query“来向tableadapter添加更多查询,尽管从发布的查询中只需将值2255插入到datatable中会更简单,而不是运行一个选择单个常量的select查询。
myDataset.EXISTE.AddEXISTERow(2255);如果查看designer.cs,您将看到TA知道的多个查询保存在一个集合中,相关的查询在每次填充之前被加载到select命令中,这就解释了为什么您的努力没有效果;当您填充时,新的select命令会被覆盖
如果您的查询是真正动态的,并且不能提前编写脚本,那么使用常规的DataAdapter和动态构建的命令和自定义参数集来填充表可能是最好的。您可以通过双击设计器中的tableadapter将其作为代码添加到tableadapter中,打开后台代码(设计器创建一个分部类,以便易于扩展),并添加类似以下内容:
void FillByVariable(EXISTEDataTable dt, string sql, Dictionary<string,object> p){
using(var da = new XxxDataAdapter(sql, this.Connection.ConnectionString) //new da that uses the same conn as the TA
{
foreach(var kvp in p)
da.SelectCommand.Parameters.AddWithValue(kvp.Key, kvp.Value); //demo code, read Joel's "can we stop using AddWithValue" blog and make something better if you use sql server
}
da.Fill(dt)
}https://stackoverflow.com/questions/49256394
复制相似问题