这是我正在阅读的有关@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预选的列
答案 0 :(得分:1)
存储过程在此用例中完全有效。但是,如果您想要更多正确映射的表,则可以使用多个选项,其中一些选项超出了DataTables
的使用范围。
您可以使用强类型DataSets
或使用ORM
(object 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>