在类中填充数据表,返回表以在另一个类中使用

时间:2011-12-15 09:12:01

标签: c# sql datatable

好的标题可能不清楚,所以让我解释一下。 我有2个班,“Form1”和“webinfo”。

在“webinfo”中我运行以下代码:

class WebInfo
{
    string myConnVRM = "Data Source = datascource;" +
                          "Initial Catalog = catalog;" +
                          "Persist Security Info=True;" +
                          "User ID=ID;" +
                          "Password=PASS;" +
                          "providerName=System.Data.SqlClient;";
    public WebInfo()
    {

    }

    public void GetVRMs(string vRMs, string start, string end, string acc)
    {
        DataTable vrmTable = new DataTable();
        SqlConnection connVRM = new SqlConnection(myConnVRM);
        connVRM.Open();
        SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@from", start);
        cmdVRM.Parameters.AddWithValue("@too", end);
        SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
        vrmAdapter.Fill(vrmTable);

        //bind to data grid and display??
    }
}

你可以看到我连接到服务器,运行一个查询,最后用结果填充我的表。

我的表单类然后调用GetVRms方法,传递相关信息。

但我需要做的是现在将此表绑定到我的表单上的datagrid,以便我可以显示。唯一的问题是我如何使用这个类中的表?

我完全在想这个吗?它是否像webinfo.vrmtable一样简单?

非常感谢

6 个答案:

答案 0 :(得分:2)

这实际上取决于意图。如果这是一个实用工具方法,那么让它返回数据,即

public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
    ...
    return vrmTable;
}

并以var data = obj.GetVRMs(...)进行访问。

如果需要保留表格,请将其存储在某处

public DataTable TheTable {get;set;}
public void GetVRMs(string vRMs, string start, string end, string acc)
{
    ...
    TheTable = vrmTable;
}

并访问为:

obj.GetVRMs(..);
var data = obj.TheTable;

注释:

  • GetVRMs可能过度缩写
  • DataTable 有效,但很多人会建议类型模型是一个更好的比喻
  • 您需要using语句等以避免问题(最明显的是:使连接池饱和)

答案 1 :(得分:2)

你的SQL在这里似乎也错了。

   SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@StartDate", start);
        cmdVRM.Parameters.AddWithValue("@EndDate", end);

OR

    string SQL = "SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(datetime,[Date],101) between '"+ start +"' and '"+ end +"' and [AC]=" + acc+ "; ";
          SqlCommand cmdVRM = new SqlCommand(SQL, connVRM);

现在您可以按照自己喜欢的方式使用它。

// As DataTable is ref
public void GetVRMs(string vRMs, string start, string end, string acc, DataTable dtVM)
{
if(dtVM == null) throw new Exception("Message");
   ......
}

OR

public DataTable GetVRMs(string vRMs, string start, string end, string acc)
{
  DataTable dtVM=new DataTable();
  .......

  Return dtVM;
}

答案 2 :(得分:1)

定义一个公共属性vrmtable,并使用WebInfo类的对象从任何地方访问它。

class WebInfo
{
    public DataTable vrmTable{get;} 

    string myConnVRM = "Data Source = datascource;" +
                          "Initial Catalog = catalog;" +
                          "Persist Security Info=True;" +
                          "User ID=ID;" +
                          "Password=PASS;" +
                          "providerName=System.Data.SqlClient;";
    public WebInfo()
    {

    }

    public void GetVRMs(string vRMs, string start, string end, string acc)
    {
        SqlConnection connVRM = new SqlConnection(myConnVRM);
        vrmTable == new DataTable();
        connVRM.Open();
        SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC]=@Acct", connVRM);
        cmdVRM.Parameters.AddWithValue("@acct", acc);
        cmdVRM.Parameters.AddWithValue("@from", start);
        cmdVRM.Parameters.AddWithValue("@too", end);
        SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM);
        vrmAdapter.Fill(vrmTable);

        //bind to data grid and display??
    }
}

答案 3 :(得分:1)

更改

    public void GetVRMs(string vRMs, string start, string end, string acc)

    public DataTable GetVRMs(string vRMs, string start, string end, string acc)

然后把

    return vrmTable;

在方法结束时。

然后像这样绑定到UI中的表:

    WebInfo wi = new WebInfo();
    DataTable dt = wi.GetVRMs(....);
    myDataGridView.DataSource = dt;
    myDataGridView.DataBind();

答案 4 :(得分:1)

为什么不直接返回DataTable?

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 
{        
    [...]
    return vrmTable;
}

答案 5 :(得分:1)

您可以使用DataTable而不是void的返回类型来返回GetVRMs方法,然后将其分配给vrmTable,然后将其分配给datagrid的数据源