【发布时间】:2023-01-20 20:34:18
【问题描述】:
所以我正在尝试练习 c# 并偶然发现连接错误,我已经声明我的连接将关闭但它告诉我我的连接仍然打开。我真的不知道这有什么问题。
public void getdept()
{
con.Open();
string query = "SELECT * FROM positions where PositionName=" + cbxposname.SelectedValue.ToString() + "";
SqlCommand cmd = new SqlCommand(query, con);
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(query, con);
sda.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
txtdeptname.Text = dr["Department"].ToString();
}
con.Close();
}
欢迎任何提示!
【问题讨论】:
-
该代码有很多错误,甚至忽略了我在下面的回答中指出的内容。首先,您可能出于什么原因将空字符串连接到该查询的末尾?它不会造成伤害,但它就像为变量分配一个数字并显式添加零。没有人会这样做,那么为什么要添加空字符串呢?
-
其次,您应该始终使用参数将值插入到 SQL 代码中。在这种情况下出现问题的可能性较小,但如果您始终做正确的事,就永远不会因做错事而被抓到。请参阅here 了解我对这个主题的看法。
-
第三,为什么要使用
DataTable和循环来填充单个TextBox?也许您为了简洁而省略了一些代码,但您无疑应该做一些不同的事情。如果您只是打算丢弃DataTable,那么您几乎肯定应该改用数据读取器。如果有多行,那么您只会看到最后一行带有这样的代码。如果只有一行,为什么要循环?如果你只使用一列,那么不要检索所有列,如果你只检索一个值,那么你应该调用ExecuteScalar。 -
您可能想查看我的 ADO.NET 示例 here 以了解在不同情况下该怎么做。那是前段时间写的,所以某些细节可以改进,但是一般原则是什么时候使用什么类型的对象和方法。
标签: c# ado.net sqlconnection sqlclient