DataTable 从 C# 中的现有数据库结构自动填充

     2023-04-09     37

关键词:

【中文标题】DataTable 从 C# 中的现有数据库结构自动填充【英文标题】:DataTable autofilled from existing database structure in C# 【发布时间】:2022-01-19 16:39:44 【问题描述】:

我有一个 WinForm 要求在文本框中插入电子邮件,单击搜索按钮后,sql 查询将搜索表中的记录并在 DataGridView 中显示结果。 这里是搜索按钮的代码

private void RegUnregSearchButton_Click(object sender, EventArgs e)
    
        var dataAccess = new DataAccess();
        var output = dataAccess.BindGrid(EmailTextBox.Text);

        DataGridView1.DataSource = output;
    

BindGrid 的目的是从查询结果中自动填充数据表的列和行,但现在我正在手动完成,因为我不明白如何从 Dapper 结果中检索列。

public class DataAccess

    public DataTable BindGrid(string param)
    
        DataTable dataTable = new DataTable();
        
        //Helper.connString("SqlConnectionString") will take the connection string from an app.config and return the value. Connection works.
        using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.connString("SqlConnectionString")))
        
            var result = connection.Query("SELECT Company, Email, Role, Id, Status from table WHERE Email = 'param'").ToList();
                    
            RegUnregUser user = new RegUnregUser();
            user.company = result.Select(x => x.Company).FirstOrDefault();
            user.email = result.Select(x => x.Email).FirstOrDefault();
            user.role = result.Select(x => x.Role).FirstOrDefault();
            user.id = result.Select(x => x.Id).FirstOrDefault();
            user.status = result.Select(x => x.Status).FirstOrDefault();

            dataTable.Columns.Add("Company");
            dataTable.Columns.Add("Email");
            dataTable.Columns.Add("Role");
            dataTable.Columns.Add("Id");
            dataTable.Columns.Add("Status");
            dataTable.Rows.Add(user.company, user.email, user.role, user.id, user.status);
            
            return dataTable;
        
    

RegUnregUser 类:

public class RegUnregUser

    public string company  get; set; 
    public string email  get; set; 
    public string role  get; set; 
    public object id  get; set; 
    public string status  get; set; 

【问题讨论】:

【参考方案1】:

Dapper 用于映射到自定义对象,而不是与 DataTables 一起使用。话虽如此,您应该可以这样做:

public class DataAccess

    public DataTable BindGrid(string param)
    
        //Helper.connString("SqlConnectionString") will take the connection string from an app.config and return the value. Connection works.
        using (IDbConnection connection = new System.Data.SqlClient.SqlConnection(Helper.connString("SqlConnectionString")))
        
            var reader = connection.ExecuteReader("SELECT Company, Email, Role, Id, Status from table WHERE Email = @Email", 
               new Email=param);
            return new DataTable().Load(reader);
        
    

请注意,我正在使用参数化查询。您的代码易受 SQL 注入攻击。

【讨论】:

您可以使用 DataAdapter :docs.microsoft.com/en-us/dotnet/api/… 我知道它容易受到 SQL 注入的攻击,但它是供内部使用的 我使用了 DataAdapter,everythink 工作正常。现在我返回一个填充的数据表,并将结果放入 datagridview

从 C# 中的现有 DOCX 生成 DOCX

...新项目。我的客户为我提供了一个现有的DOCX,我需要用数据库中的一些客户数据替换一些占位符。好像这还不够具有挑战性,根据使用客户数据的某些条件,某些部分是可选的。所以我必须提供一些逻辑来完全省略DOCX的某些部... 查看详情

从 C# 中的 DataTable 中获取 Distinct Column 以及其他列值

】从C#中的DataTable中获取DistinctColumn以及其他列值【英文标题】:TakingDistinctColumnalongwithothercolumnvaluesalsofromDataTableinC#【发布时间】:2013-12-1610:43:28【问题描述】:我有一个数据表,其中有4个列。Col1、Col2、Col3、Col4。我想过滤DataT... 查看详情

从 SQL Server 检索列名和类型到 DataTable C#

】从SQLServer检索列名和类型到DataTableC#【英文标题】:RetrievecolumnnamesandtypesfromSQLServertoDataTableC#【发布时间】:2015-12-2919:10:23【问题描述】:在SQLServer中基于现有表构建空DataTable的最佳方法是什么?我目前的尝试是这个,它只是... 查看详情

从 C# .NET 中的 DataTable 到 JSON

】从C#.NET中的DataTable到JSON【英文标题】:FromDataTableinC#.NETtoJSON【发布时间】:2011-01-1918:10:16【问题描述】:我是C#和.NET的新手,但我已经编写了这段代码来调用存储过程,然后我想获取返回的DataTable并将其转换为JSON。SqlConnection... 查看详情

如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?

】如何使用SQL命令从我的DataTable对象中使用foreach-loop更新C#中的MSAccess数据库?【英文标题】:HowtoupdateMSAccessdatabaseinC#withforeach-loopfrommyDataTableobjectwithSQLcommand?【发布时间】:2021-07-1221:03:54【问题描述】:我正在尝试使用foreach循... 查看详情

C++ 中的 Google 协议缓冲区:从现有结构创建消息

】C++中的Google协议缓冲区:从现有结构创建消息【英文标题】:GoogleProtocolBuffersinC++:Creatingamessagefromanexistingstruct【发布时间】:2014-02-2617:07:25【问题描述】:我正在考虑将Googleprotocolbuffers作为我使用命名管道在C++和C#之间进行通... 查看详情

C# 将 DataTable 绑定到现有 DataGridView 列定义

】C#将DataTable绑定到现有DataGridView列定义【英文标题】:C#BindDataTabletoExistingDataGridViewColumnDefinitions【发布时间】:2011-02-1304:09:09【问题描述】:我一直在与NullReferenceException作斗争,希望这里有人能够为我指明正确的方向。我正在... 查看详情

关于c#中的datatable,不知道如何清空里面的数据

在C#中,用一个按钮,按下后就对DataTable添加相应的数据,然后在DataGridView里面添加。但每点一次按钮都会DataTable添加一行,用了clear()函数也不行,怎么办参考技术A清空数据new是最好方法,clear()会清空结构不是很可取,要是想D... 查看详情

从 DataTable/DataSet 中的搜索创建 DataRow

】从DataTable/DataSet中的搜索创建DataRow【英文标题】:CreatingaDataRowfromasearchinaDataTable/DataSet【发布时间】:2012-06-0818:33:30【问题描述】:我在这个数据库访问方面取得了进展......这是我需要做的:我有一个在类命名空间中定义的现... 查看详情

从 C# 数据表创建 SQL Server 表

...据表创建SQLServer表【英文标题】:CreatingaSQLServertablefromaC#datatable【发布时间】:2010-11-2320:07:19【问题描述】:我有一个使用C#手动创建并加载数据的DataTable。在SQLServer2005中使用DataTable中的列和数据创建表的最有效方法是什么?【... 查看详情

c#直接创建一个datatable,并为之添加数据(自定义datatable)转

DataTabledt=newDataTable("cart");DataColumndc1=newDataColumn("prizename",Type.GetType("System.String"));DataColumndc2=newDataColumn("point",Type.GetType("System.Int16"));DataColumndc3=newDataColumn("n 查看详情

C# DataTable 更新 Access 数据库

】C#DataTable更新Access数据库【英文标题】:C#DataTableupdateAccessDatabase【发布时间】:2014-01-0814:46:27【问题描述】:如何将DataTable保存到文件中。accdb(Access)现有一个?我使用了以下代码,但它不起作用:using(OleDbConnectionoledbConnection=n... 查看详情

c#如何将datatable中的数据批量更新到mysql数据库

datatable中的数据就是从数据库表中读取的,我现在想修改了datatable一个数据,然后再更新到数据库这个表中,注意不是重新插入,是把原来数据进行更新!!!谢谢参考技术AC#利用update更新数据到oracle数据库:第一步:打开oracle... 查看详情

通过 PInvoke 从 C# 到 C++ 的简单结构中的垃圾数据

】通过PInvoke从C#到C++的简单结构中的垃圾数据【英文标题】:GarbagedatainsimplestructfromC#toC++viaPInvoke【发布时间】:2017-10-2119:37:17【问题描述】:我有一个简单的Size结构,它被定义为#pragmapack(push,8)structSizefinalpublic:std::int32_tWidth=0;std... 查看详情

Datatable C# - 如何根据 ID 从一个表中获取详细记录及其关联的另一表中的子记录

】DatatableC#-如何根据ID从一个表中获取详细记录及其关联的另一表中的子记录【英文标题】:DatatableC#-HowtogetdetailrecordfromonetableanditsassociatedsubrecordfromanothertablebasedonID【发布时间】:2020-11-2410:38:26【问题描述】:我在数据表中有一... 查看详情

从 C++ 到 C# 的结构中的 Marshal 回调

】从C++到C#的结构中的Marshal回调【英文标题】:MarshalcallbackinastructfromC++toC#【发布时间】:2019-02-2608:38:03【问题描述】:我需要将有关对象的必要信息作为带有回调和其他数据的结构返回。这就是它在C#端的样子:[UnmanagedFunctionPo... 查看详情

跳过第一个单元格和最后一个单元格 - 使用 Open XML 从 Excel 到 C# 中的 DataTable

...第一个单元格和最后一个单元格-使用OpenXML从Excel到C#中的DataTable【英文标题】:Skipfirstcell&lastcell-FromExceltoDataTableinC#withOpenXML【发布时间】:2016-11-2418:41:54【问题描述】:我已经实现了这里提到的代码:FromExceltoDataTableinC#withOpe... 查看详情

从 Windows DataGridView DataTable C# 创建 Microsoft Access 表

】从WindowsDataGridViewDataTableC#创建MicrosoftAccess表【英文标题】:CreateMicrosoftAccessTablefromWindowsDataGridViewDataTableC#【发布时间】:2012-02-2801:15:14【问题描述】:我想知道如何在C#中从WindowsDataGridViewDataTable创建新的MicrosoftAccess表。我已经... 查看详情