簡體   English   中英

使用C#在數據庫中搜索記錄

[英]Search a record in database using C#

首先,我是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; 
        }
    }

但是每次嘗試時,都會得到:

沒有找到記錄

(在我的代碼中為法語中的“ AucunRésultat”, if result == 0時的result == 0

當我調試時,我的數據表不是空的,所以我認為這不是問題:

這是dt返回的數據表

我的目標是返回搜索到的行的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);

        }

    }

和我的類“ DatabaseConnection”:

class DatabaseConnection
{
    private string sql_string;
    private string strCon;
    System.Data.SqlClient.SqlDataAdapter da_1;


    public string Sql
    {

        set
        {
            sql_string = value;

        }
    }

    public string connection_string
    {

        set { strCon = value; }

    }

    public System.Data.DataSet GetConnection
    {

        get { return MyDataSet(); }

    }

    public DataSet dat_set { get; private set; }

    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;
    }

    public void UpdateDatabase(System.Data.DataSet ds)
    {
        System.Data.SqlClient.SqlCommandBuilder cb = new System.Data.SqlClient.SqlCommandBuilder(da_1);

        cb.DataAdapter.Update(ds.Tables[0]);
    }
}
}

首先,您必須將Dataset的聲明移至表單頂部,如全局所示:

public partial class Form1 : Form
    {
      System.Data.DataSet ds= new System.Data.DataSet();
      private void Form1_Load(object sender, EventArgs e)
     {

而從你的程序中刪除聲明MyDataSet然后在你的chercherDansDataSet功能你肥大使用可變dat_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 + "'";

我建議您可以使用數據集進行操作,這是示例代碼:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM