ExecuteReader:CommandText 属性尚未初始化

Posted

技术标签:

【中文标题】ExecuteReader:CommandText 属性尚未初始化【英文标题】:ExecuteReader: CommandText property has not been initialized 【发布时间】:2012-02-14 15:05:58 【问题描述】:

我已经做了几个小时的研究,但似乎没有什么适用于我目前的情况。

使用:Visual Studio 2010 .net 4.0, 语言:C#

问题:

我创建了一个表单,然后将特定表从我的数据源拖放到表单上,让 VS2010 为我创建数据表。

当我尝试使用数据表向数据库更改或添加值时,我收到上面列出的错误

“”。

从我之前的研究来看,不,我没有定义 CommandText,也不知道在哪里创建一个,因为 VS2010 创建了所有数据表代码并且没有在 .cs 文件本身中列出它。

按f7从表单获取的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace mineral_monitor.Manual_edits

    public partial class mineral_stock : Form
    
    public mineral_stock()
    
        InitializeComponent();
    

    private void mineralsBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    
        this.Validate();
        this.mineralsBindingSource.EndEdit();
        this.tableAdapterManager.UpdateAll(this.ore_stockDataSet1);
    

    private void mineral_stock_Load(object sender, EventArgs e)
    
        // TODO: This line of code loads data into the 'ore_stockDataSet1.minerals' table. 
        // You can move, or remove it, as needed.
        this.mineralsTableAdapter.Fill(this.ore_stockDataSet1.minerals);
    
   

已通过在数据设计器中手动创建更新字符串来解决此问题。

【问题讨论】:

CommandText = ????请发布您的代码.. CommandType = ??? 适配器负责将命令文本传递给命令对象。因此,您的适配器中可能缺少SelectCommand @WiktorZychla - 当我在数据设计器中查看 TableAdapter 属性时,它确实声明它具有选择、插入和更新命令。 【参考方案1】:

当您创建数据源时,VisualStudio 会自动为您创建选择命令,但更新、插入和删除命令不会。您必须手动或使用 SqlCommandBuilder 指定它们。查看this 链接。

【讨论】:

我听取了您的建议并查看了该 MSDN 站点。我做了一些乱七八糟的事情,现在我得到“更新需要一个有效的更新命令”,这是一个非常直接的错误。经过我的研究,尽管每个人都说 CommandString 构建器无法构建一些东西来将 ALL 更新到表中。如何让保存按钮更新通过 DataGridViewer 所做的所有更改? 如果你没有一个表,但是有一些 Join 什么的,你将不得不手动指定你的 DataAdapter 的 UpdateCommand。在其他情况下,SqlCommandBuilder 应该为您自动生成更新命令。查看此链接:***.com/questions/588361/… 这是一个单表。正如我所说,我所做的只是从数据源窗口拖放到 Windows 窗体上,它自动设计了 datagridview 和修改按钮(打开/保存等);我也不太明白你链接我的页面。我已经有一个作为矿物表适配器的数据适配器,但是在运行“mineralsTableAdapter.Fill(this.ore_stockDataSet1.minerals)”时,它仍然返回我没有设置“更新命令”。 尝试删除所有内容并重新开始...新建 winforms 项目,添加数据源,选择您的表格(或尝试使用其他表格),拖放您的数据集。那它有用吗? 我创建了一个新的 Windows 窗体项目并设置了数据连接。当我将表格拖放到表单上时,它会生成以下代码:pastebin.com/A8uguLqW 该程序似乎在“this.tableAdapterManager.UpdateAll(this.ore_stockDataSet);”处中断。给出“未设置更新命令”错误。

以上是关于ExecuteReader:CommandText 属性尚未初始化的主要内容,如果未能解决你的问题,请参考以下文章

对DataTable进行分组

.NET SqlDataReader对象是否使用数据库游标,或者整个结果集是否已加载到RAM中?

SqlCommand.ExecuteReader() 啥时候返回 null?

.net SqlCommand.ExecuteReader 是不是关闭连接?

来自 objComm.ExecuteReader 的 DataReader

ExecuteReader()获得数据