从 SQL Server 数据库填充 DataTable
Posted
技术标签:
【中文标题】从 SQL Server 数据库填充 DataTable【英文标题】:Fill DataTable from SQL Server database 【发布时间】:2013-06-02 05:29:58 【问题描述】:这个对我来说是个谜,我知道我从别人那里得到的代码,在我的情况下它返回的数据表是空的
conSTR
为连接字符串,设置为全局字符串
public DataTable fillDataTable(string table)
string query = "SELECT * FROM dstut.dbo." +table;
SqlConnection sqlConn = new SqlConnection(conSTR);
sqlConn.Open();
SqlCommand cmd = new SqlCommand(query, sqlConn);
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
sqlConn.Close();
return dt;
编辑 1 重点是稍后在选项卡控件上的数据网格视图中显示此表,这是关于那个的问题 displaying multiple datatable in tabcontrol C#
这里只是给我一个空白的数据网格视图
编辑 2 都试过了,当我尝试显示表格时,datagridview 是空的,有正确数量的行但现在值
【问题讨论】:
变量表的值是多少? 表里有记录吗? @Steve table = 数据库中的表名(有好几个) @Freelancer 数据库中的表不是空的,有趣的是我可以获得表的行数(测试过)但不是它的值 @iakovl2 试试下面的代码。 【参考方案1】:如果变量table
包含无效字符(如空格),则应在变量周围添加方括号。
public DataTable fillDataTable(string table)
string query = "SELECT * FROM dstut.dbo.[" + table + "]";
using(SqlConnection sqlConn = new SqlConnection(conSTR))
using(SqlCommand cmd = new SqlCommand(query, sqlConn))
sqlConn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
顺便说一句,这种代码要非常小心,因为它对 Sql Injection 是开放的。我希望你的表名不是来自用户输入
【讨论】:
它来自我创建的列表,那里没有无效选项。还是有同样的问题 @iakovl2 很遗憾,这没有帮助 - 但请学习史蒂夫在这里对using
的使用;正确使用using
实际上真的很重要。如果我很挑剔,我会提到史蒂夫错过了一个(围绕读者)......但显然我还不够粗俗,甚至顺便提到这一点......;p
@MarcGravell 但这里读者直接传递给负载。您的意思是最好将行分成两部分以将 using 应用于 SqlDataReader 对象?
@Steve 个人,是的,我更喜欢这样 - 以便通过 using
明确处理它。 DataTable
不保证会处理它(尽管它确实有一个 Close()
- 仅在成功情况下)。但实际上,除非您依靠CommandBehavior.CloseConnection
关闭连接(您不在这里),否则它可能并不重要。我对IDisposable
有一个非常简单但有效的方法:如果我的代码对IDisposable
对象负责,那么我的代码负责确保它得到处理。【参考方案2】:
尝试以下:
public DataTable fillDataTable(string table)
string query = "SELECT * FROM dstut.dbo." +table;
SqlConnection sqlConn = new SqlConnection(conSTR);
sqlConn.Open();
SqlCommand cmd = new SqlCommand(query, sqlConn);
SqlDataAdapter da=new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
sqlConn.Close();
return dt;
希望对你有帮助。
【讨论】:
如果这有什么改变,我会有点惊讶;当然值得一试,但DataTable.Load
方法也可以正常工作。另外:你为什么ExecuteNonQuery
那个?你不应该执行cmd
根本 - 适配器会这样做。
@MarcGravell 可能是。我不知道上面的编码风格。我总是以这种风格编码。所以我推荐了这个。以上是关于从 SQL Server 数据库填充 DataTable的主要内容,如果未能解决你的问题,请参考以下文章
从视图填充或创建表的 SQL Server 过程 - 性能问题
如何从填充 DataTable 的 SELECT 中获取 SQL Server 上的原始架构?
我需要帮助从SQL Server表中排序日期并将它们填充到字符串中
如何使用json从sql server ASP.net中检索数据