阅读表格 SQL 在 C# DataTable

我读了很多关于插入的帖子 DataTable 在表格中 SQL, 但有一种插入表的简单方法 SQL 在表格中 .NET DataTable?
已邀请:

小明明

赞同来自:

在这里,给这个机会 /它只是伪码/


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//;
}
}

涵秋

赞同来自:

var table = new DataTable//; 
using /var da = new SqlDataAdapter/"SELECT * FROM mytable", "connection string"//
{
da.Fill/table/;
}

君笑尘

赞同来自:

很多方法。

使用 ADO.Net 和使用 fill 在数据适配器上获取 DataTable:


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/;


矿井的优选。

我强烈建议看看 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 此目的是从可能的数据库的实施中摘要。

帅驴

赞同来自:

独立于供应商版本,完全依赖于接口 ADO.NET; 2 时尚:


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 &lt; 100; i++/
{
dt = Read1<mysqlconnection>/query/; // ~9800ms
dt = Read2<mysqlconnection, mysqldataadapter="">/query/; // ~2300ms

dt = Read1<sqliteconnection>/query/; // ~4000ms
dt = Read2<sqliteconnection, sqlitedataadapter="">/query/; // ~2000ms

dt = Read1<sqlceconnection>/query/; // ~5700ms
dt = Read2<sqlceconnection, sqlcedataadapter="">/query/; // ~5700ms

dt = Read1<sqlconnection>/query/; // ~850ms
dt = Read2<sqlconnection, sqldataadapter="">/query/; // ~600ms

dt = Read1<vistadbconnection>/query/; // ~3900ms
dt = Read2<vistadbconnection, vistadbdataadapter="">/query/; // ~3700ms
}
sw.Stop//;
MessageBox.Show/sw.Elapsed.TotalMilliseconds.ToString///;



Read1

它在眼中看起来更好,但数据适配器更好。 /不要混淆一个数据库超过另一个数据库,请求均不同/. 但是,它们之间的差异取决于请求。 原因可能会得出结论
Load

需要验证每行各种限制字符串
http://msdn.microsoft.com/en-u ... .aspx
添加字符串时 /这是一种方法
DataTable

/, 尽管
Fill

位于 DataAdapters, 这是专门为此设计的 - 快速创造 DataTables.
</vistadbconnection,></vistadbconnection></sqlconnection,></sqlconnection></sqlceconnection,></sqlceconnection></sqliteconnection,></sqliteconnection></mysqlconnection,></mysqlconnection></s,></t>

冰洋

赞同来自:

Entrated Model:您可以从任何地方使用它!

您只需要在此类中的函数中调用以下格式。


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;
}
}

要回复问题请先登录注册