Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlCeCommand.ExecuteScalar不返回表中第二行的值_C# - Fatal编程技术网

C# SqlCeCommand.ExecuteScalar不返回表中第二行的值

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

我正在尝试一个简单的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"].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中连接了哪个数据库,否则我永远不会知道。