C# 在C 2008中从数据库检索记录
我需要以下代码逻辑的语法帮助: 我有一个从数据库获取电子邮件地址的代码块。电子邮件地址需要分配给字符串变量strEmailAddress,并用逗号分隔 我的代码是:C# 在C 2008中从数据库检索记录,c#,asp.net-3.5,C#,Asp.net 3.5,我需要以下代码逻辑的语法帮助: 我有一个从数据库获取电子邮件地址的代码块。电子邮件地址需要分配给字符串变量strEmailAddress,并用逗号分隔 我的代码是: SqlConnection conn = new SqlConnection(strConn); string sqlEmailAddress = "usp_Get_Email_Address"; SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn); cmd
SqlConnection conn = new SqlConnection(strConn);
string sqlEmailAddress = "usp_Get_Email_Address";
SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn);
cmdEmailAddr.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader();
如何循环记录并将结果存储在以逗号分隔的strEmailAddress中
while (sqlDREmailAddr.Read())
{
//...process each row here
}
我还将在using语句中包装阅读器,以确保其正确关闭:
using (SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader())
{
}
根据数据集中的列的名称,从每个记录读取值将类似于以下更新:现在合并所有地址:
var emailAddress = new StringBuilder();
var emailAddressOrdinal = sqlDREmailAddr.GetOrdinal("EmailAddress");
while (sqlDREmailAddr.Read())
{
if (emailAddress.Length > 0)
emailAddress.Append(',');
emailAddress.Append(sqlDREmailAddr.GetString(emailAddressOrdinal));
}
使用以下方法:
这就是你要找的 using (SqlConnection conn = new SqlConnection(strConn)){ string sqlEmailAddress = "usp_Get_Email_Address"; using (SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn)){ cmdEmailAddr.CommandType = CommandType.StoredProcedure; conn.Open(); // Typo Glitch! using (SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader()){ while(sqlDREmailAddr.Read()){ if (!sqlDREmailAddr.IsDBNull(sqlDREmailAddr.GetOrdinal("emailAddr"))){ // HANDLE THE DB NULL... }else{ strEmailAddress = sqlDREmailAddr.GetSqlString(sqlDREmailAddr.GetOrdinal("emailAddr")); // Do something with strEmailAddr... } } } } } 注意: conn变量上的输入错误错误。。。 进行检查以确保返回的数据库值不为空 调用GetOrdinal以返回基于emailAddr字符串值的列,该值对应于SQL Select…查询中的列,该列是作为GetSqlString参数的int类型。。 编辑:感谢约翰·桑德斯指出了一个错误 编辑2:感谢彼得·利勒沃德指出了一个拼写错误 希望这有帮助, 顺致敬意,
Tom。对HasRows的测试是多余的,因为如果没有行,第一次调用Read将返回false。我也这么认为,我最初的答案没有它……但在MSDN的示例中,他们都做了。所以我把两者都放了。我不知道你的存储过程返回了什么。它在数据记录中如何显示?它返回一个字符串;可以返回多条记录;答案已更新。阅读SqlDataReader方法,您可能会学到一些东西。将GetOrdinals移出循环。瑞德的大写字母是R:@Peter Lillevold:唉……真希望有个聪明的拼写检查器能发现那个。。。是 啊好主意非常感谢你的评论!
while (sqlDREmailAddr.Read())
{
...
// Assumes only one column is returned with the email address
strEmailAddress = sqlDREmailAddr.GetString(0);
}
using (SqlConnection conn = new SqlConnection(strConn)){
string sqlEmailAddress = "usp_Get_Email_Address";
using (SqlCommand cmdEmailAddr = new SqlCommand(sqlEmailAddress, conn)){
cmdEmailAddr.CommandType = CommandType.StoredProcedure;
conn.Open(); // Typo Glitch!
using (SqlDataReader sqlDREmailAddr = cmdEmailAddr.ExecuteReader()){
while(sqlDREmailAddr.Read()){
if (!sqlDREmailAddr.IsDBNull(sqlDREmailAddr.GetOrdinal("emailAddr"))){
// HANDLE THE DB NULL...
}else{
strEmailAddress = sqlDREmailAddr.GetSqlString(sqlDREmailAddr.GetOrdinal("emailAddr"));
// Do something with strEmailAddr...
}
}
}
}
}