首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时更改SelectCommand

在运行时更改SelectCommand
EN

Stack Overflow用户
提问于 2018-03-13 20:35:55
回答 2查看 779关注 0票数 0

我已经使用下一个select命令在我的数据集上创建了一个tableadapter

代码语言:javascript
复制
select count(*) as cuenta from table1.

但是,在运行时,我需要用不同数量的子句组成不同的selects。我想使用相同的tableadapter,但我无法更改select命令。

这是我的问题的一个小例子:

DataSource“ds”上数据适配器"EXISTE“的原始select命令:

代码语言:javascript
复制
select 1 as cuenta(*)

在设计器上,我拖放数据适配器以在窗体上创建一个实例:"EXISTE1“

代码:

代码语言:javascript
复制
EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Fill(ds.EXISTE);

但它总是返回"1“作为结果,而不是2255。

如何在不创建新的Fill函数的情况下运行其他命令?

诚挚的问候

EN

回答 2

Stack Overflow用户

发布于 2020-05-10 17:42:56

此问题的解决方案是从适配器而不是TableAdapter填充数据集。这对我来说工作得很好。

代码语言:javascript
复制
EXISTE1.Adapter.SelectCommand = new System.Data.SqlClient.SqlCommand("select 2255 as cuenta");
EXISTE1.Adapter.Fill(ds.EXISTE);
票数 0
EN

Stack Overflow用户

发布于 2020-09-16 13:35:57

您应该通过在设计器中右键单击tableadapter并选择"add query“来向tableadapter添加更多查询,尽管从发布的查询中只需将值2255插入到datatable中会更简单,而不是运行一个选择单个常量的select查询。

代码语言:javascript
复制
myDataset.EXISTE.AddEXISTERow(2255);

如果查看designer.cs,您将看到TA知道的多个查询保存在一个集合中,相关的查询在每次填充之前被加载到select命令中,这就解释了为什么您的努力没有效果;当您填充时,新的select命令会被覆盖

如果您的查询是真正动态的,并且不能提前编写脚本,那么使用常规的DataAdapter和动态构建的命令和自定义参数集来填充表可能是最好的。您可以通过双击设计器中的tableadapter将其作为代码添加到tableadapter中,打开后台代码(设计器创建一个分部类,以便易于扩展),并添加类似以下内容:

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49256394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档