我正在尝试一个简单的Windows窗体,它从SQL Server CE数据库中检索值。 name
表格中有两列company
和Employee
。
行如下:
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
{
}
上面的代码适用于表格中的第1行,即当我在文本框中输入XXX时,ABC会显示在表格中。但是当我在文本框中输入YYY时,返回null。我是C#的业余爱好者。只是尝试一些简单的例子来学习。这个你能帮我吗。谢谢
事先提前。答案 0 :(得分:3)
这是设计。 SqlCeCommand.ExecuteScalar
方法仅返回第1行。
来源:SqlCeCommand.ExecuteScalar
MSDN Documentation :
执行查询并返回第一行的第一列 查询返回的结果集。额外的列或行 被忽略了。
如果您希望并且需要在结果集中处理多于一行,请使用ExecuteReader()
。
答案 1 :(得分:1)
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();
答案 2 :(得分:0)
尝试在SQL Management Studio中更新表格的XXX行:
update EMPLOYEES set Company = 'ZYX' where Name = 'XXX'
然后再次尝试您的表单,看看它为XXX返回的值。如果它仍然是ABC,那么你没有连接到正确的数据库。
顺便说一下,我自己尝试了你的代码,并且它返回YYY行,所以我认为这可能是数据/连接问题。
(仅供参考,我不得不将此作为答案而不是评论,因为它不会让我发表评论。)