DataTableMapping使用适用于存储过程的adapter.FillSchema方法

时间:2012-11-06 06:05:55

标签: asp.net sql-server-2008 sql-server-2005 c#-4.0 webforms

这是我正在阅读的有关@MSDN的方法, 我的问题是,如果我想在存储过程中使用它的一个例子 事实上,该存储过程的查询已经指定了要从表中选择的列,如下所示:

SELECT Columnsome, columnother, , , , ...FROM thisSQLdbTable

虽然我想实施这种特定方法的方法,但从我所做的一些研究来看,这似乎是非常先进的  “最佳方式”可用于将数据从SQL Server提取到Asp.net DataTable中。

public static DataTable GetCustomerData(string dataSetName,
string connectionString)
{
DataTable table = new DataTable(dataSetName);

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(
        "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

    DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
    mapping.ColumnMappings.Add("CompanyName", "Name");
    mapping.ColumnMappings.Add("ContactName", "Contact");

    connection.Open();

    adapter.FillSchema(table, SchemaType.Mapped);
    adapter.Fill(table);
    return table;
}

}

或者如果我通过SP查询指定所选列的话,它不是使用的方法

如果不需要选择/指定列

,我实际上可以删除该存储过程

存储过程正在进行特定计算并使用计算结果更新表格,然后我将其“MODE”切换为从已更新的表中选择结果。

我做的是recyceling(;给它一个参数(位类型) 然后存储过程询问提供的bool / bit参数的值, 如果它的状态为true,则更新(执行它的原始任务)

如果它是假的它做了选择oporation所以我正在使用它,因为我会用2个单独的命令

但现在我已经搜索了将数据从db提取到数据表的更好方法

我放弃了双向SP,我将通过上面的exaple进行选择,如果它们不打算一起使用,就像我当前的SP一样,在服务上面的GetCustomersData()时进行预选。 / p>

所以问题是我是否需要让函数进行选择,或者我可以使用我的sp现成选择来实现它以使用GetCustomersData()来实现它只会执行其余的任务并且只有mapp预选的列

2 个答案:

答案 0 :(得分:1)

存储过程在此用例中完全有效。但是,如果您想要更多正确映射的表,则可以使用多个选项,其中一些选项超出了DataTables的使用范围。

您可以使用强类型DataSets或使用ORMobject relational mapper)。

ref:输入的数据集:http://msdn.microsoft.com/en-us/library/esbykkzb(v=vs.71).aspx

参考:什么是ORM:http://en.wikipedia.org/wiki/Object-relational_mapping

ORM的例子

ref:实体框架:http://msdn.microsoft.com/en-us/data/ef.aspx

ref:NHibernate:http://nhforge.org/

答案 1 :(得分:1)

对你的实际要求仍有点困惑,但这里有:

我看到你在C#代码中使用直接查询,“最好的方法”就是用它制作一个SP然后说:

SqlCommand command = conn.CreateCommand();
            SqlDataAdapter sqlAdapter = new SqlDataAdapter(command);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            command.CommandText = "sp_GetCustomerData";

然后在需要时添加参数后执行:

            conn.Open();
            sqlAdapter.Fill(dtResult);                
            conn.Close();

其中dtResult是Datatable。 因此,在这种情况下您不需要执行任何映射,并且由于您使用的是数据库中的SP,它将比直接查询更快地工作,您可以随时更改查询逻辑,而无需重新部署代码。 / p>