嘿,我是stacoverflow的新手,想问一些帮助。我需要在文本框中键入ID,当单击搜索时,它将找到记录并将每个列值显示到文本框。我正在使用访问数据库。我找到了解决方案,但他们似乎没有工作。我找到并调整了以下代码但是给出了错误操作conn.open()并用C#编码。请帮帮我。
源代码:
public partial class FamilyTree : UserControl
{
private OleDbConnection conn;
public FamilyTree()
{
InitializeComponent();
}
private void FamilyTree_Load(object sender, System.EventArgs e)
{
}
private void ConnectToDatabase()
{
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Hannes\Documents\Visual Studio 2013\Projects\fam\fam\Prog.mdb");
conn.Open();
}
private void DisconnectDatabase()
{
conn.Close();
}
private void btnSearch_Click(object sender, System.EventArgs e)
{
string title = txtID.Text.ToString();
string queryString = "SELECT * FROM FamilyTree" + txtID ;
OleDbCommand command = new OleDbCommand();
command.CommandText = queryString;
command.Connection = conn;
conn.Open();
OleDbDataReader dr = command.ExecuteReader();
while (dr.Read())
{
txtSex.Text += dr["gendre"].ToString();
txtColour.Text += dr["name"].ToString();
txtDOB.Text += dr["DOB"].ToString();
txtStatus.Text += dr["city"].ToString();
txtCock.Text += dr["mom"].ToString();
txtHen.Text += dr["dad"].ToString();
}
conn.Close();
}
答案 0 :(得分:0)
确保在btnSearch_Click中使用'conn'之前在某处调用'ConnectToDatabase()'方法。
接下来,确定您是使用Id还是Title来过滤结果。
创建queryString时,请确保使用'WHERE Id ='或'WHERE Title ='子句进行过滤 - 但也要确保在queryString的末尾和末尾添加的值之间有一个空格 - 如果Id为23,您给出的示例将生成'SELECT * FROM FamilyTree23'。这会出错,因为数据库中没有此名称的表。
最后,正如其他答案中所提到的,“使用”数据库连接,并使用查询参数是一种更好的做法。 'using'语句将在使用后自动释放连接,参数化查询将阻止SQL注入问题,并确保将正确的数据类型传递给查询。
示例:
public partial class FamilyTree : UserControl
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Hannes\Documents\Visual Studio 2013\Projects\fam\fam\Prog.mdb";
public FamilyTree()
{
InitializeComponent();
}
private void FamilyTree_Load(object sender, System.EventArgs e)
{
}
private void btnSearch_Click(object sender, System.EventArgs e)
{
string title = txtID.Text.ToString();
sqlQuery = "SELECT * FROM FamilyTree WHERE Title = ?";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("Title", title);
conn.Open();
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
txtSex.Text += dr["gendre"].ToString();
txtColour.Text += dr["name"].ToString();
txtDOB.Text += dr["DOB"].ToString();
txtStatus.Text += dr["city"].ToString();
txtCock.Text += dr["mom"].ToString();
txtHen.Text += dr["dad"].ToString();
}
}
}
}
}