我写了下面的代码。我想知道我是否可以进一步改进它。
public static DataTable GetDepartments()
{
DataTable dt = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "proc_GetDepartments";
command.CommandType = CommandType.StoredProcedure;
connection.Open();
using (SqlDataAdapter da = new SqlDataAdapter(command))
{
command.Connection = connection;
da.Fill(dt);
}
}
}
return dt;
}
这里我使用了SqlDataAdapter。什么是SqlDataReader编写它的方式。还有哪一个更好。任何帮助/指导都表示赞赏。
答案 0 :(得分:2)
还有哪一个更好?
正如我在comment中所说,它们是两回事。苹果和橘子..
SqlDataAdapter
正在使用a DataTable
。它可以使用SQL中的表填充DataTable
。 SqlDataReader
逐个读取数据库行 。
在您的情况下,我认为没有理由使用SqlDataReader
,因为您想要返回DataTable
。转到SqlDataAdapter
;)
..如果您可以使用。
添加SqlDataReader的代码
不确定。但正如我所说,您不能将DataTable
与SqlDataReader
一起使用。但是嘿..以下是使用SqlDataReader
;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int firstcell = reader.GetInt32(0); // I assume your first column is int.
string secondcell = reader.GetString(1); // I assume your second column is string.
string thirdcell = reader.GetString(2); // I assume your third column is string.
Console.WriteLine("FirstCell = {0}, SecondCell = {1}, ThirdCell = {2}", firstcell, secondcell , thirdcell);
}
答案 1 :(得分:1)
如果要循环每个记录并在循环中执行一些操作数据,请使用SqlDataReader,但是如果要将数据放在数据集或数据表上,然后想将其绑定到asp.net控件(例如:GridView) ,ComboBox等)然后使用SqlDataAdapter。
无论如何,这是如何使用SqlDataReader。
using System;
using System.Data.SqlClient;
class ConnectToSqlConnection {
static void Main(string[] args) {
String sConn = "server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI";
String sSQL = "select id, firstname, lastname from Employee";
SqlConnection oConn = new SqlConnection(sConn);
oConn.Open();
SqlCommand oCmd = new SqlCommand(sSQL, oConn);
SqlDataReader oReader = oCmd.ExecuteReader();
int idxID = oReader.GetOrdinal("id");
int idxFirstName = oReader.GetOrdinal("firstname");
int idxLastName = oReader.GetOrdinal("lastname");
while(oReader.Read()) {
Console.WriteLine("{0} {1} {2}",
oReader.GetValue(idxID),
oReader.GetValue(idxFirstName),
oReader.GetValue(idxLastName));
}
}