C# 使用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[
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
getresult==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声明