C# SqlCeCommand.ExecuteScalar不返回表中第二行的值
我正在尝试一个简单的windows窗体,它从SQLServerCE数据库检索值。C# SqlCeCommand.ExecuteScalar不返回表中第二行的值,c#,C#,我正在尝试一个简单的windows窗体,它从SQLServerCE数据库检索值。Employee表中有两列,name和company 这些行如下所示: Name Company XXX ABC YYY DEF 我使用以下代码从db检索数据: private void button1_Click(object sender, EventArgs e) { string conn = ConfigurationManager.ConnectionStrings["con"].C
Employee
表中有两列,name
和company
这些行如下所示:
Name Company
XXX ABC
YYY DEF
我使用以下代码从db检索数据:
private void button1_Click(object sender, EventArgs e)
{
string conn = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
SqlCeConnection con = new SqlCeConnection(conn);
SqlCeCommand cmd = new SqlCeCommand("select company from EMPLOYEES where name = @name", con);
cmd.Parameters.AddWithValue("@name",textBox1.Text);
con.Open();
try
{
object obj = new object();
obj = cmd.ExecuteScalar();
label1.Text = (string)obj;
}
finally
{
}
上述代码适用于表中的第一行,即当我在文本框中给出XXX时,ABC显示在表格中。但当我在文本框中输入YYY时,返回null。我是C#的业余爱好者。只是尝试几个简单的例子来学习。请帮我解决这个问题。谢谢
提前 尝试在SQL Management Studio中更新表的XXX行:
update EMPLOYEES set Company = 'ZYX' where Name = 'XXX'
然后再次尝试表单,查看它为XXX返回的值。如果它仍然是ABC,那么您没有连接到正确的数据库
顺便说一句,我自己尝试了你的代码,它返回YYY行,所以我认为这可能是数据/连接问题
(仅供参考,我必须将此作为一个答案而不是注释,因为它还不允许我进行注释。)ExecuteScalar()用于返回标量值(单个值)。这通常用于Count(*)以返回行数
从代码中看,您似乎试图返回多行。如果要遍历数据集,则应使用SqlCeDataReader
类
SqlCeCommand cmd = new SqlCeCommand("select company from EMPLOYEES where name = @name");
cmd.Parameters.AddWithValue("@name",textBox1.Text);
cmd.Connection = con;
con.Open();
SqlCeDataReader dr = selectSQL.ExecuteReader();
while (dr.Read())
{
label1.Text = dr["ColumnName"].ToString();
}
dr.Close();
con.Close();
这是故意的
SqlCeCommand.ExecuteScalar
方法只返回第一行
来源:SqlCeCommand.ExecuteScalar
:
执行查询并返回查询中第一行的第一列
查询返回的结果集。额外的列或行
都被忽略了
如果您希望并且需要处理结果集中的多行,请使用
ExecuteReader()
。您是否100%确定输入或数据库值中没有空格?谢谢您的回复。对当我在SQL management studio中运行相同的查询时,将检索所有行的结果。请确保在“最终”中关闭con对象。泄漏…谢谢你的回复。我也试过了。我关闭了con obj和cmd对象一次。到现在为止什么都没用。连接似乎很好,因为第一行工作正常,即当我输入XXX时,ABC被检索到您“在SQL MS中使用insert语句将值插入到表中”的数据库是什么?我怀疑它不是| DataDirectory |\employees.sdf
,但除非您告诉我您在SQL Studio中连接了哪个数据库,否则我永远不会知道。