C# 使用C在数据库中搜索记录#

C# 使用C在数据库中搜索记录#,c#,dataset,C#,Dataset,首先,我是C#的初学者,如果这个问题很容易(或不容易),我很抱歉,但是我被阻止了 我正在尝试使用该代码在数据库中查找记录: public int chercherDansDataSet(string search) { DataRow[] foundRows; String idSearch; int result = 0; int idKey = 0 ; DataTable dt = ds.Tables[

首先,我是C#的初学者,如果这个问题很容易(或不容易),我很抱歉,但是我被阻止了

我正在尝试使用该代码在数据库中查找记录:

 public int chercherDansDataSet(string search)
    {
        DataRow[] foundRows;
        String idSearch;
        int result = 0;
        int idKey = 0 ;
        DataTable dt = ds.Tables[0];

        string research = "last_name = '"+search+"'";


        foundRows = dt.Select(research);

        result = foundRows.Length;


        if(result == 0)
        {
            MessageBox.Show("Aucun résultat");
            return 1;
        }
        else
        {
            DataRow rowBack;
            rowBack = foundRows[0];
            idSearch = rowBack[0].ToString();
            idKey = Int32.Parse(idSearch);
            return idKey; 
        }
    }
但每次我尝试时,我都会:

没有发现任何记录

(“我的代码中的法语Aucun Résultat,当我的
if
get
result==0时的结果)

调试时,我的datatable不是空的,因此我认为这不是问题所在:

我的目标是返回搜索行的ID

这是我的数据集配置,但我不认为问题来自这里:

 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;
    }
还有Form1Load,其中设置了我的ds:

    private void Form1_Load(object sender, EventArgs e)
    {

        try
        {
            objConnect = new DatabaseConnection();
            conString = Properties.Settings.Default.EmployeeConnectionString;

            objConnect.connection_string = conString;
            objConnect.Sql = Properties.Settings.Default.SQL;

            ds = objConnect.GetConnection;
            MaxRows = ds.Tables[0].Rows.Count;

            NavigateRecords();
        }
        catch (Exception err)
        {

            MessageBox.Show(err.Message);

        }

    }
和我的类“数据库连接”:


我建议您可以使用数据集进行此操作,以下是示例代码:

ds = getUserName();  //search using parameterized query and return record found as ds

if (ds.Tables[0].Rows.Count > 0)  //if record found more than 1 row, mean doesnt empty
{
    return ds;
}
else
{
    MessageBox.Show("Aucun résultat");
    return 1;
}

我建议您可以使用数据集进行此操作,以下是示例代码:

ds = getUserName();  //search using parameterized query and return record found as ds

if (ds.Tables[0].Rows.Count > 0)  //if record found more than 1 row, mean doesnt empty
{
    return ds;
}
else
{
    MessageBox.Show("Aucun résultat");
    return 1;
}

首先,您必须将数据集的声明移动到表单顶部,就像全局声明一样:

public partial class Form1 : Form
    {
      System.Data.DataSet ds= new System.Data.DataSet();
      private void Form1_Load(object sender, EventArgs e)
     {
并从过程中删除声明
MyDataSet
然后在
cherdansdataset
函数中,使用变量
dat\u set
代替
ds

  DataTable dt = dat_set.Tables[0];
而不是

 DataTable dt = ds.Tables[0];
尝试将“[]”添加到变量和空格中,如:

string research = "[last_name] = '" + search + "'";
foundRows = dt.Select(research);
result = foundRows.Length;
如果数据表中没有“\”,请尝试:

string research = "[last name] = '" + search + "'";

首先,您必须将数据集的声明移动到表单顶部,就像全局声明一样:

public partial class Form1 : Form
    {
      System.Data.DataSet ds= new System.Data.DataSet();
      private void Form1_Load(object sender, EventArgs e)
     {
并从过程中删除声明
MyDataSet
然后在
cherdansdataset
函数中,使用变量
dat\u set
代替
ds

  DataTable dt = dat_set.Tables[0];
而不是

 DataTable dt = ds.Tables[0];
尝试将“[]”添加到变量和空格中,如:

string research = "[last_name] = '" + search + "'";
foundRows = dt.Select(research);
result = foundRows.Length;
如果数据表中没有“\”,请尝试:

string research = "[last name] = '" + search + "'";


从图片上看不清楚。是“姓”还是“姓”?变量搜索的值是什么?请记住,所有用户输入都应该参数化,以防止SQL注入。那么,为什么不从数据库中检索所需的记录,而不是从包含所有值的数据表中进行搜索呢?您正在进行两次搜索,而不是一次搜索,这似乎是一个额外的步骤。为什么不直接查询数据库,而不是提取所有记录,然后对它们进行筛选呢。该表中许多值的值后面都有一个省略号。这(可能是尾随空格)会把查询搞砸吗?从图片上看不清楚。是“姓”还是“姓”?变量搜索的值是什么?请记住,所有用户输入都应该参数化,以防止SQL注入。那么,为什么不从数据库中检索所需的记录,而不是从包含所有值的数据表中进行搜索呢?您正在进行两次搜索,而不是一次搜索,这似乎是一个额外的步骤。为什么不直接查询数据库,而不是提取所有记录,然后对它们进行筛选呢。该表中许多值的值后面都有一个省略号。这(可能是尾随空格)会弄乱查询吗?啊哈,谢谢,但问题不是我的Datatable是否为空,而是方法“Select”从未找到相关行:/我只是为他建议了另一种方法,为什么干脆否决我,如果像这样,谁还会在这里共享?downvote很可能是因为答案没有回答问题。啊哈,谢谢,但问题不是我的数据表是否为空,而是方法“Select”从未找到相关行:/我只是为他建议了另一种方法,为什么干脆投票否决我,如果这样,谁还会在这里共享?downvote很可能是因为答案没有回答问题。从过程MyDataSet中删除声明,然后在CherCherdanSdatasett中,该变量以不同的形式使用到我的解决方案中,如果我移动声明,其他方法将无法正常工作。可以显示“ds”的声明吗矫揉造作,因为在你的代码中DS是空的?我编辑了我的答案,你可以在你的表单加载上添加一个DS声明从你的过程MyDataSet中删除该声明然后在你的CherCherDansDataSett中该变量以不同的形式用在我的解决方案中,如果我移动该声明,其他方法无法正常工作。您可以显示“ds”的声明和矫揉造作,因为在您的代码中ds是空的吗?我编辑了我的答案,您可以在表单加载上方添加ds声明