从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语句返回的数据不止一行,则需要使用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
-执行不需要返回的sqlExecuteScalar
-用于返回一个值的SELECT查询(不要与一行混合)ExecuteReader
-用于返回>=0行的SELECT查询
http://msdn.microsoft.com/en-us/library/182ax5k8.aspx
var reader = cmdGetOldMasterId.ExecuteReader();
while(reader.Read())
{
// reader[0], reader[1]...
}