【问题标题】:DataSet Tables Not Populating未填充数据集表
【发布时间】:2015-02-08 20:06:16
【问题描述】:

我对在 Visual Studio 中使用 DataSets 和 DataTables 比较陌生,目前正在尝试填充 DataTable 以查询 SQL Insert 语句。我现在用的是这个。

            string query = "USE [Database] SELECT e.ID, e.FieldTypeDesc, e.FieldTypeNum, e.tblFieldRefID, f.TableName, f.RefColumn, f.ColumnName FROM tblEnum e JOIN tblFieldRef f  ON e.tblFieldRefID = f.ID;";

            string field0; //field0 - field12 declared

            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString;
            conn.Open();

            SqlCommand cmd = new SqlCommand(query, conn);

            MRWPDataSet1 dsMRWP = new MRWPDataSet1();
            SqlCommand cmdMRWP = new SqlCommand(query, conn);

            SqlDataAdapter daMRWP = new SqlDataAdapter();
            daMRWP.SelectCommand = cmdMRWP;
            daMRWP.Fill(dsMRWP);  

这一切似乎都按计划进行。不过,当我谈到这部分时......

            foreach (DataRow drMRWP in dsMRWP.Tables[0].Rows)
            {
                field0 = drMRWP["Field0"].ToString();
                field1 = drMRWP["Field1"].ToString(); //for field0 - field12

                string update = "INSERT INTO [dbo].[Table] ([Code], [Description], [SendEmail], [Type], [CustomForeColor], [Inactive], [ModifiedDate], [CreatedDate], [ModifiedById], [CreatedById], [StartDate], [EndDate]) VALUES (field1, field2, field3, field4, field5, field5, field6, field7, field8, field9, field10, field11, field12)";
                SqlCommand upd = new SqlCommand(update, conn);
            }

它被完全跳过,显然没有值存储在 drMRWP 中。它甚至没有进入调试,只是跨过。

我对这一切都很陌生,所以我很可能忽略了某些东西或在某个地方犯了错误,但如果我能看到它可能是什么,那该死的。对此提供的任何见解,或简化可能过于复杂、草率的代码的建议将不胜感激。

【问题讨论】:

    标签: c# sql datatable dataset


    【解决方案1】:

    由于您使用的是强类型DataSet,我假设它包含多个表。因此,要么使用“普通”DataSet 并继续使用 Tables[0],要么使用正确的表,该表是从 DataTable 派生的自动生成类型。

    例如(假设自动生成的表格类型为tblEnum):

    foreach (DataRow drMRWP in dsMRWP.tblEnum)
    {
        // ...
    }
    

    它还具有强类型DataRows,如果您将其转换为DataRow 中的DataRow,您将丢失这些附加属性@ 987654329@。所以将DataRow替换为tblEnumRow(名称来源于表名)。

    【讨论】:

    • MRWPDataSet1 中的DataTable 与query 中的一开始是相同的。我应该参考它吗?我应该使用DataSet dsMRWP = new DataSet(); 还是foreach (DataRow drMRWP in dsMRWP.DataTable1.Rows) 还是我错过了你的意思?抱歉无知;就像我说的,我对这个还是很陌生。
    • @Eiketsu:你可以同时使用。由于您已经输入了DataSet,我会使用它。
    • 尝试使用 foreach (DataRow drMRWP in dsMRWP.DataTable1) 和 tblEnum 和 tblFieldRef 但它仍然跳过所有内容。
    • @Eiketsu:如果你使用普通的DataSet/DataTable,会发生什么?如果你填充一个类型化的数据集,你通常(曾经?)使用适当的TableAdapter,它位于它自己的命名空间中,其名称派生自数据集并以...TableAdapters结尾(所以可能是dsMRWPTableAdapters)。尝试使用他们的Fill 方法。
    • @Eiketsu:你说过它“仍然跳过所有内容”,这意味着桌子是空的,不是吗?当然没有Field0列,看看你的sql,看看你有什么意思。如果您想要第一个字段,请改用drMRWP[0]。
    猜你喜欢
    • 2018-06-15
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多