2013-11-25 112 views
1

现在,我将数据添加到数据集,然后选择数据的第一个表中的第一行和第一列。这样做一定有一些简短的方法吗?从SQL Server数据库中获取1个单元的更简单的方法

SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon); 
LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 

SqlDataAdapter da = new SqlDataAdapter(LoadCmd); 
DataSet ds = new DataSet(); 

da.Fill(ds); 

string dato = Convert.ToString(ds.Tables[0].Rows[0][0]); 

回答

5

使用SqlCommand.ExecuteScalar

执行查询,并在 返回第一行的第一列由查询返回的结果集。其他列或行是 忽略。

using(SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon)) 
{ 
    LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
    GlobalVariables.offCon.Open(); 
    var result = LoadCmd.ExecuteScalar(); 
} 

ExecuteScalar回报object类型的数据,你可以投/转换为你需要的类型。

(考虑使用using statementSqlCommand对象)

1

如果查询返回只有一行只有一列,然后正确的方法是ExecuteScalar

SqlCommand LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon); 
LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
object result = LoadCmd.ExecuteScalar(); 

然后,根据预期的数据类型,你检查空返回并尝试转换结果。
因此,假设返回的值是一个字符串

if(result != null) 
{ 
    string dato = result.ToString(); 
} 

为空的检查是在你的情况强制性,除非你是绝对肯定的是,该行确定了在WHERE子句总是你的数据表存在。 同时请注意,的ExecuteScalar返回NULL,而不是DBNull.Value如果需要的值没有被发现

+0

我的数据库从来没有空,但感谢你的小费! –

+1

您不应该在start_tid列中关注null,但是如果您的参数“@ ekgmaaleid”始终与“ekgmaaleid”列匹配。如果where子句没有找到任何匹配参数值的记录,那么ExecuteScalar的结果将为空。 – Steve

+0

啊我明白你的意思了。那么也不会发生这种情况,但下次我使用SQL连接创建程序时,我会回顾您的代码。 –

2
string dato; 
using (var offCon = new SqlConnection("...")) 
using (var LoadCmd = new SqlCommand("Select start_tid from EKGDATA where ekgmaaleid = @ekgmaaleid", GlobalVariables.offCon)) 
{ 
    LoadCmd.Parameters.AddWithValue("@ekgmaaleid", maaleid); 
    offCon.Open(); 
    dato = (string)LoadCmd.ExecuteScalar(); 
} 
+0

(字符串)而不是Convert.ToString?聪明。 –

相关问题