从SQL CE将选定的行获取到C#中

本文关键字:获取 SQL CE | 更新日期: 2023-09-27 17:58:03

我对C#比较陌生,正在开发一个与本地数据库通信的应用程序(SQL Compact 3.5)。我可以运行标准的select语句,但当涉及到将数据导入C#时,我会有点不知所措。

到目前为止,我有一个"delete"查询,它删除了所有名为"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#中做到这一点吗?

从SQL CE将选定的行获取到C#中

如果您假设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());
}

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]...
}