c# – 如何进行查询以检索特定数据

我正在学习C#和SQL Server.我正在学习一个简单的教程,这使我创建了一个连接和更新数据库的类DBconnection.然后我有一个简单的C#表单,使用按钮和DataSet在表行上来回导航以克隆数据,然后在某些标签上显示信息.

没有问题’直到这里,但后来我想,如果我想显示特定行的单个值(列),如果“显示具有特定名字的人的姓氏”,该怎么办?

我熟悉SQL查询命令,所以我想要的是这样的:

SELECT last_name FROM Employees WHERE first_name = 'Jason'

按照我的代码……

DBconnection.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace cemiGEST
{
/// <summary>
/// A class that makes the connection to the SQL Database
/// </summary>
class DBconnection
{
    // variables
    private string sql_string;
    private string strCon;
    System.Data.SqlClient.SqlDataAdapter da_1;

    // set methods
    public string Sql
    {
        set { sql_string = value; }
    }

    public string connection_string
    {
        set { strCon = value; }
    }

    // DataSet
    public System.Data.DataSet GetConnection
    {
        get { return MyDataSet(); }
    }

    // MyDataSet method
    private System.Data.DataSet MyDataSet()
    {
        System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(strCon);
        con.Open();

        da_1 = new System.Data.SqlClient.SqlDataAdapter(sql_string, con);

        System.Data.DataSet dat_set = new System.Data.DataSet();
        da_1.Fill(dat_set, "Table_Data_1");

        con.Close();

        return dat_set;
    }

    // Update DB method
    public void UpdateDB(System.Data.DataSet ds)
    {
        System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1);
        cb.DataAdapter.Update(ds.Tables[0]);
    }
}
}

我只是通过递增一个更新行号的变量来访问值(当来回移动时).下面是一些示例代码.

public partial class Example : Form
{

// variables
DBconnection objConnect;
string conStringAUTH;
DataSet ds;
DataRow dr;
int maxRows;
int inc = 0;

    private void Login_Load(object sender, EventArgs e)
    {
        CloseBeforeLogin = true;

        try
        {
            objConnect = new DBconnection();
            conStringAUTH = Properties.Settings.Default.authConnectionString;

            objConnect.connection_string = conStringAUTH;
            objConnect.Sql = Properties.Settings.Default.authSQL;

            ds = objConnect.GetConnection;

            maxRows = ds.Tables[0].Rows.Count;

            if (maxRows == 0)
            {
                MessageBox.Show("No user found. Loading first run wizard.");
                NewUser newUser = new NewUser();
                newUser.ShowDialog();
            }

        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }
}

我确信这很简单,但我没有到达那里.

编辑:

我更喜欢使用我的类DBconnection而没有外部库.我不是在PC的项目,所以现在无法测试任何东西,但经过一夜安眠,在(重新)查看我的代码之后,我可能找到了答案.请告诉我你是否认为这样可以解决问题:

在我的第二个类(我连接并访问数据库)中,我已经使用了SQL查询,更具体地说:

objConnect.Sql = Properties.Settings.Default.authSQL;

此查询(authSQL)由我创建并嵌入在“设置”中,此处我将其导入.所以,如果我改为做以下事情,你认为它会起作用吗:

objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'";

“Properties.Settings.Default.authSQL”代码只不过是字符串“SELECT * FROM AUTH”的快捷方式 – AUTH是我的表,为简单起见,我称之为Employees.

所以,它会是这样的:

public partial class Example : Form
{

// variables
DBconnection objConnect;
string conStringAUTH;
DataSet ds;
DataRow dr;
int maxRows;
int inc = 0;

    private void Login_Load(object sender, EventArgs e)
    {
        CloseBeforeLogin = true;

        try
        {
            objConnect = new DBconnection();
            conStringAUTH = Properties.Settings.Default.authConnectionString;

            objConnect.connection_string = conStringAUTH;
            objConnect.Sql = "SELECT last_name FROM Employees WHERE first_name = 'Jason'";

            ds = objConnect.GetConnection;

            // Data manipulation here

        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
        }
    }

最佳答案 这里不需要数据集.如果你知道你想要的sql:使用它 – 也许有一些参数化.例如,使用“dapper”,我们可以:

string firstName = "Jason";
var lastNames = con.Query<string>(
    "SELECT last_name FROM Employees WHERE first_name = @firstName",
    new { firstName }).ToList();
点赞