【问题标题】:SQL Adapter appears not to be filling datasetSQL 适配器似乎没有填充数据集
【发布时间】:2013-06-13 15:48:52
【问题描述】:

我目前正在尝试使用我拥有的数据库填充数据集。以下代码似乎根本没有填充数据集:

    private static DataSet records = new DataSet();
    public static DataSet LoanersData()
    {
        //query string **add more tables as needed**
        string querystring = "SELECT * FROM LoanerItems; SELECT * FROM Customers; SELECT * FROM Jobs";

        //sql connection
        SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
        scsb.DataSource = "LLOYD2\\";
        scsb.InitialCatalog = "LoanersTest";
        scsb.IntegratedSecurity = true;
        scsb.ConnectTimeout = 30;

        SqlConnection loanersConnection = new SqlConnection(scsb.ConnectionString);

        SqlDataAdapter adapter = new SqlDataAdapter(querystring, loanersConnection);
        adapter.TableMappings.Add("Table", "LoanerItems");
        adapter.TableMappings.Add("Table1", "Customers");
        adapter.TableMappings.Add("Table2", "Jobs");

        adapter.Fill(records);

        return records;
    }

还有这个:

    {
        InitializeComponent();
        records = DataRetreive.LoanersDataSet.LoanersData();
        LoanerItemsTable = records.Tables["LoanerItems"];
        CustomersTable = records.Tables["Customers"];
        LoanerItemsTable = records.Tables["Jobs"];
    }

我无法确定数据集是否已填充,但在尝试像这样查询其中一个数据表时:

            IEnumerable<DataRow> query = from LoanerItems in LoanerItemsTable.AsEnumerable() select LoanerItems;
            foreach (DataRow p in query)
            {
                loanerComboBox1.Items.Add(p.Field<string>("BCPartnNumber"));
            }

我没有收到任何错误,但没有任何内容添加到组合框中。在调试期间,我注意到它无法循环遍历数据行,因为数据表中没有任何内容。

我正在尝试做的事情和我正在做的事情可能是两件不同的事情。我想至少澄清一下,在表格中“BCPartnumber 是列的名称。如果需要,我可以提供更多代码,但目前没有太多其他内容可提供。

【问题讨论】:

    标签: c# sql sql-server sql-server-2005


    【解决方案1】:

    最好的方法是使用查询分析器或 SQL Server Management Studio 查看 LoanerItems 表的结构,以验证它是否具有 BCPartnNumber 字段。

    如果您在数据库中有记录,如果 LoanerItems 表中没有 BCPartnNumber 字段,您的代码将引发异常。

    【讨论】:

    • 它在数据库中。只需在 Visual Studio 中使用 Transact-SQL 编辑器,我就知道它就在那里。我在数据库中有大约 100 条记录,并且该列不包含空记录。
    • 将其更改为数据库中不存在的列无法引发异常。我认为这意味着数据表中没有记录?
    • 在 records.Tables 中更改表的名称无法引发异常。例如LoanerItemsTable = records.Tables["SomeRandomTable"]; 仍然无法抛出异常。
    • 我很确定错误存在于尝试填充数据集本身的某个地方。我只是不确定错误是什么。
    • 您收到原始帖子的错误是什么表明您没有收到任何错误。 records.Tables["SomeRandomTable"] 应该返回 null,这可能导致 LoanerItemsTable.AsEnumerable() 抛出 ArgumentException。这是怎么回事?
    【解决方案2】:

    如果您尝试从 3 个表中填充数据集,请分别尝试三个 select 语句并更改您的代码,如 article 所示

    如果您对此有任何疑问,请告诉我

    【讨论】:

      【解决方案3】:

      我称之为“5 磅袋装 10 磅肉”。您的目标是用部件填充 ComboBox,但您的函数从三个查询返回一个包含三个表的 DataSet。将 LoanersData() 函数重构为三个不同的函数,它们为三组数据返回一个 DataTable(而不是 DataSet)。例如,PartsData() 用于您想要在 ComboBox 中的部件数据。然后将 ComboBox 绑定到 PartsData() 的结果:

      loanerComboBox1.DataSource = PartsData();
      

      您还必须设置 ComboBox 的 DisplayMember 和 ValueMember 属性。

      【讨论】:

        猜你喜欢
        • 2020-07-14
        • 2011-02-11
        • 1970-01-01
        • 2014-07-02
        • 2015-06-21
        • 1970-01-01
        • 2014-03-23
        • 2015-12-23
        • 2011-09-26
        相关资源
        最近更新 更多