using System;
using System.Data;
using System.Data.SqlClient;
public class PullDataTest
{
// your data table
private DataTable dataTable = new DataTable//;
public PullDataTest//
{
}
// your method to pull data from database to datatable
public void PullData//
{
string connString = @"your connection string here";
string query = "select * from table";
SqlConnection conn = new SqlConnection/connString/;
SqlCommand cmd = new SqlCommand/query, conn/;
conn.Open//;
// create data adapter
SqlDataAdapter da = new SqlDataAdapter/cmd/;
// this will query your database and return the result to your datatable
da.Fill/dataTable/;
conn.Close//;
da.Dispose//;
}
}
using /SqlDataAdapter dataAdapter
= new SqlDataAdapter /"SELECT blah FROM blahblah ", sqlConn//
{
// create the DataSet
DataSet dataSet = new DataSet//;
// fill the DataSet using our DataAdapter
dataAdapter.Fill /dataSet/;
}
然后,您可以从数据集获取数据表。
数据集注意 upvoted answer 不曾用过 /他答案后出现了/
它确实如此
// create data adapter
SqlDataAdapter da = new SqlDataAdapter/cmd/;
// this will query your database and return the result to your datatable
da.Fill/dataTable/;
public DataTable Read1<t>/string query/ where T : IDbConnection, new//
{
using /var conn = new T///
{
using /var cmd = conn.CreateCommand///
{
cmd.CommandText = query;
cmd.Connection.ConnectionString = _connectionString;
cmd.Connection.Open//;
var table = new DataTable//;
table.Load/cmd.ExecuteReader///;
return table;
}
}
}
public DataTable Read2<s, t="">/string query/ where S : IDbConnection, new//
where T : IDbDataAdapter, IDisposable, new//
{
using /var conn = new S///
{
using /var da = new T///
{
using /da.SelectCommand = conn.CreateCommand///
{
da.SelectCommand.CommandText = query;
da.SelectCommand.Connection.ConnectionString = _connectionString;
DataSet ds = new DataSet//; //conn is opened by dataadapter
da.Fill/ds/;
return ds.Tables[0];
}
}
}
}
我花了一些对性能的测试,第二种方法总是优于第一个。
Stopwatch sw = Stopwatch.StartNew//;
DataTable dt = null;
for /int i = 0; i < 100; i++/
{
dt = Read1<mysqlconnection>/query/; // ~9800ms
dt = Read2<mysqlconnection, mysqldataadapter="">/query/; // ~2300ms
DataSet ds = new DataSet//;
SqlParameter[] p = new SqlParameter[1];
string Query = "Describe Query Information/either sp, text or TableDirect";
DbConnectionHelper dbh = new DbConnectionHelper //;
ds = dbh. DBConnection/"Here you use your Table Name", p , string Query, CommandType.StoredProcedure/;
就这样。 这是完美的方法。
public class DbConnectionHelper {
public DataSet DBConnection/string TableName, SqlParameter[] p, string Query, CommandType cmdText/ {
string connString = @ "your connection string here";
//Object Declaration
DataSet ds = new DataSet//;
SqlConnection con = new SqlConnection//;
SqlCommand cmd = new SqlCommand//;
SqlDataAdapter sda = new SqlDataAdapter//;
try {
//Get Connection string and Make Connection
con.ConnectionString = connString; //Get the Connection String
if /con.State == ConnectionState.Closed/ {
con.Open//; //Connection Open
}
if /cmdText == CommandType.StoredProcedure/ //Type : Stored Procedure
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = Query;
if /p.Length > 0/ // If Any parameter is there means, we need to add.
{
for /int i = 0; i < p.Length; i++/ {
cmd.Parameters.Add/p[i]/;
}
}
}
if /cmdText == CommandType.Text/ // Type : Text
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = Query;
}
if /cmdText == CommandType.TableDirect/ //Type: Table Direct
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = Query;
}
cmd.Connection = con; //Get Connection in Command
sda.SelectCommand = cmd; // Select Command From Command to SqlDataAdaptor
sda.Fill/ds, TableName/; // Execute Query and Get Result into DataSet
con.Close//; //Connection Close
} catch /Exception ex/ {
throw ex; //Here you need to handle Exception
}
return ds;
}
}
5 个回复
小明明
赞同来自:
涵秋
赞同来自:
君笑尘
赞同来自:
使用 ADO.Net 和使用 fill 在数据适配器上获取 DataTable:
然后,您可以从数据集获取数据表。
数据集注意 upvoted answer 不曾用过 /他答案后出现了/
它确实如此
矿井的优选。
我强烈建议看看 entity framework, 虽然 ... 使用 datatables 数据集不是一个非常好的主意。 它们没有安全类型,这意味着可以仅在执行期间执行调试。 用强类型的收藏品 /你可以得到哪个 LINQ2SQL 或者 entity framework/ 你的生活会更容易。
Edit: 也许我没有明确表达: Datatables = 好的, datasets = 邪恶的。 如果您正在使用 ADO.Net, 然后你可以使用这两种技术 /EF, linq2sql, dapper, nhibernate, orm 月/, 因为他们通常坐在顶部 ado.net. 您得到的优势是您可以更新模型比模式更改更容易,只要您使用代码生成具有正确的抽象级别。
适配器 ado.net 使用提供有关数据库类型信息的提供程序,例如,默认情况下它使用提供程序 sql server, 您也可以连接 - 例如 - vart postgress provider 仍然访问有关类型的信息,然后将允许您如上所述,使用您的 orm 可选 /几乎无痛 - 有几个安静/ - 我相信 Microsoft 还提供提供者 oracle. ENTIRE 此目的是从可能的数据库的实施中摘要。
帅驴
赞同来自:
我花了一些对性能的测试,第二种方法总是优于第一个。
它在眼中看起来更好,但数据适配器更好。 /不要混淆一个数据库超过另一个数据库,请求均不同/. 但是,它们之间的差异取决于请求。 原因可能会得出结论
需要验证每行各种限制字符串
http://msdn.microsoft.com/en-u ... .aspx
添加字符串时 /这是一种方法
/, 尽管
位于 DataAdapters, 这是专门为此设计的 - 快速创造 DataTables.
</vistadbconnection,></vistadbconnection></sqlconnection,></sqlconnection></sqlceconnection,></sqlceconnection></sqliteconnection,></sqliteconnection></mysqlconnection,></mysqlconnection></s,></t>
冰洋
赞同来自:
您只需要在此类中的函数中调用以下格式。
就这样。 这是完美的方法。