是否在C#中输入DataSet或DataTable值?

时间:2017-01-10 10:37:12

标签: c# .net datatable reference dataset

我知道boost_dec_floatDataSet,因此它们必须是参考 类型

但每当我以任何方式传递它们时,我都必须DataTablereturn ds来填充它们。

示例:

dt

这不会填充我的数据集,但不会填写我的数据集。

DataSet ds = new DataSet();
FillDataSet(ds); //This get data from database

我无法理解,如果我发送DataSet ds = new DataSet(); ds = FillDataSet(ds); //This get data from database object DataSet,则应通过引用填写。

假设class从数据库中获取数据。

3 个答案:

答案 0 :(得分:1)

在这两种情况下,您都在函数中进行按值调用 - FillDataSet

这里的FillDataSet函数似乎将数据复制到新的DataSet并返回它。因此创建了一个新对象。如果要使前一代码有效,则可能必须将参数作为引用传递给FillDataSet()函数。像这样的事情 - FillDataSet(ref ds)

另请参阅此 - https://msdn.microsoft.com/en-us/library/0f66670z.aspx

答案 1 :(得分:1)

首先要记住的是引用类型变量,并且通过引用传递两个完全不同的概念。这里传递对象的值(ds),即使它们是引用类型变量。

在上面提到的两种情况下,你实际上是在传递数据集的值,在第二种情况下,你将函数的返回值赋给变量,你必须看看这里

答案 2 :(得分:0)

对您的示例进行一点修改

class Program
    {
        static void Main(string[] args)
        {
            DataSet ds = new DataSet();
            FillDataSet(ds);
        }

       private static void FillDataSet(DataSet ds)
       {
        DataSet ds2 = new DataSet();//Say you have created an new instance of Class DataSet.

        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        dt.Columns.Add("Name");
        ds2.Tables.Add(dt);
        ds = ds2; //here ds is now referencing address of ds2 created by new DataSet()
       }
    }

现在,由于您的ds不是您ds方法发送的FillDataSet(ds)

这种情况等同于您在ds = new DataSet();

内完成FillDataSet(ds);

希望这可以解释这种情况。如果您有任何疑问,请发表评论。