从SQL CE中将选择的行添加到C#中

时间:2013-02-06 13:06:06

标签: c# sql sql-server-ce

我对C#比较陌生,正在开发一个与本地数据库(SQL Compact 3.5)通信的应用程序。运行标准的select语句我没问题 - 但是当涉及到将数据转换为C#时 - 我有点迷失。

到目前为止我所拥有的是一个'删除'查询,删除所有名为'Master'的行。 现在我已经知道我实际上需要在删除它们之前获取这些行的ID(出于数据库完整性目的)。我在运行标准选择查询时没有问题 - 我的问题是从SQL CE中选择行到C#应用程序(使用数组或数据表或任何最符合逻辑/方便的地方)

这就是我现在所拥有的,但它只返回一个值,而不是选择:

string sql = "select listid from list where ShortDesc='Master'";
SqlCeCommand cmdGetOldMasterId = new SqlCeCommand(sql, DbConnection.ceConnection);
int oldKey = (int)cmdGetOldMasterId.ExecuteScalar();
Console.WriteLine("Old ID: " + oldKey);

我需要能够在每个返回的行上执行foreach {}循环。有什么想法我怎么能在C#中做到这一点?

2 个答案:

答案 0 :(得分:6)

如果你假设你的sql语句返回的是更多的一行数据,你需要使用SqlCeDataReader而不是ExecuteScalar

string sql = "select listid from list where ShortDesc='Master'";
SqlCeCommand cmdGetOldMasterId = new SqlCeCommand(sql, DbConnection.ceConnection);
SqlCeDataReader reader = cmdGetOldMasterId.ExecuteReader();
while(reader.Read())
{
    Console.WriteLine(reader[0].ToString());
    // or, if your listid is an integer  
    // int listID = reader.GetInt32(0);   
}

另一种可能性是使用SqlCeDataAdapter来填充DataTable(这样性能较差,但如果您需要稍后以其他方法处理数据,则更有用)

string sql = "select listid from list where ShortDesc='Master'";
SqlCeCommand cmdGetOldMasterId = new SqlCeCommand(sql, DbConnection.ceConnection);
SqlCeDataAdapter da = new SqlCeDataAdapter(cmdGetOldMasterId);
DataTable dt = new DataTable();
da.Fill(dt);

....
foreach(DataRow r in dt.Rows)
{
    Console.WriteLine(r["listid"].ToString());
}

答案 1 :(得分:2)

SqlCeCommand有几种执行方法

  • ExecuteNonQuery - 执行不需要返回内容的sql
  • ExecuteScalar - 用于SELECT查询返回一个值(不要与一行混合)
  • ExecuteReader - 对于返回> = 0行
  • 的SELECT查询

http://msdn.microsoft.com/en-us/library/182ax5k8.aspx

var reader = cmdGetOldMasterId.ExecuteReader();

while(reader.Read()) 
{
  // reader[0], reader[1]...
}