从 C# 中的现有数据库结构自动填充 DataTable
DataTable autofilled from existing database structure in C#
我有一个 WinForm,它要求在文本框中插入一封电子邮件,在单击搜索按钮后,sql 查询将在 table 中搜索记录并将结果显示在数据网格视图。
这里是搜索按钮的代码
private void RegUnregSearchButton_Click(object sender, EventArgs e)
{
var dataAccess = new DataAccess();
var output = dataAccess.BindGrid(EmailTextBox.Text);
DataGridView1.DataSource = output;
}
BindGrid 的目的是根据查询结果自动填充数据的列和行table,但现在我正在手动执行,因为我不明白如何检索来自 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 class:
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; }
}
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 注入攻击。
我有一个 WinForm,它要求在文本框中插入一封电子邮件,在单击搜索按钮后,sql 查询将在 table 中搜索记录并将结果显示在数据网格视图。 这里是搜索按钮的代码
private void RegUnregSearchButton_Click(object sender, EventArgs e)
{
var dataAccess = new DataAccess();
var output = dataAccess.BindGrid(EmailTextBox.Text);
DataGridView1.DataSource = output;
}
BindGrid 的目的是根据查询结果自动填充数据的列和行table,但现在我正在手动执行,因为我不明白如何检索来自 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 class:
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; }
}
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 注入攻击。