如何将SQLiteDataTable中的数据传递到TextBox控件
解决SQLite数据关联到TextBox的问题
我来帮你梳理下代码里的问题,一步步解决把SQLite数据显示到TextBox的问题:
你的代码里存在几个关键问题:
- SQL查询逻辑错误:你用了
listProdutos.SelectedIndex(这是选中项的索引,是整数)去匹配表中的NOME_PRODUTO(字符串类型),应该取选中项的文本内容,比如listProdutos.SelectedItem.ToString() - 类型不匹配错误:
precoIng[0]是DataTable对象,不能直接赋值给TextBox.Text(需要字符串类型),得从DataTable里提取具体的字段值 - SQL注入风险:直接拼接字符串生成SQL语句很危险,应该用参数化查询
- 资源未正确释放:数据库连接和DataAdapter没有自动释放资源,容易造成内存泄漏
修正后的完整代码:
private void btnUpdate_Click(object sender, EventArgs e) { // 先判断是否选中了产品 if (listProdutos.SelectedItem == null) { MessageBox.Show("请先选择一个产品"); return; } // 使用using语句自动管理资源,不用手动Close using (var con = new SQLiteConnection("你的数据库连接字符串")) { con.Open(); // 参数化查询,避免SQL注入,同时匹配正确的字段值 string query = "SELECT PRECO_PRODUTO FROM INGREDIENTES WHERE NOME_PRODUTO = @NomeProduto"; using (var adapter = new SQLiteDataAdapter(query, con)) { // 添加参数,传入选中的产品名称 adapter.SelectCommand.Parameters.AddWithValue("@NomeProduto", listProdutos.SelectedItem.ToString()); DataTable priceTable = new DataTable(); adapter.Fill(priceTable); // 判断是否查询到数据 if (priceTable.Rows.Count > 0) { // 提取第一行的价格字段,转成字符串赋值给TextBox tbPrecoProduto.Text = priceTable.Rows[0]["PRECO_PRODUTO"].ToString(); } else { tbPrecoProduto.Text = "未找到对应产品的价格"; } } } }
关键细节说明:
- 参数化查询:用
@NomeProduto作为占位符,通过Parameters.AddWithValue传入实际值,既避免了SQL注入,也保证了数据类型匹配 - 资源自动释放:
using语句会在代码块结束后自动调用Dispose方法,关闭数据库连接并释放DataAdapter资源,不用手动写con.Close() - 数据提取逻辑:查询结果存在
DataTable的Rows集合里,因为你的查询条件是产品名称(应该唯一),所以取第一行的PRECO_PRODUTO列值即可 - 空值判断:先检查列表是否有选中项,再检查查询结果是否为空,避免出现空引用异常
内容的提问来源于stack exchange,提问作者Igor Henriques
相关产品推荐
相关产品推荐

