C# 在变量中存储多行
我在SQL中有一个简单的表(MyEmail),其中包含一些需要发送的电子邮件,例如:C# 在变量中存储多行,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我在SQL中有一个简单的表(MyEmail),其中包含一些需要发送的电子邮件,例如: ID Email 1 name@yahoo.com 2 something2@yahoo.com 3 name3@google.com 4 something4@yahoo.com 我制作了一个存储过程(GetAddress)来收集它们,以便以后可以将它们存储到变量中: SELECT Email FROM dbo.MyEmai 我需要代码C#部分的帮助: SqlCommand cmd
ID Email
1 name@yahoo.com
2 something2@yahoo.com
3 name3@google.com
4 something4@yahoo.com
我制作了一个存储过程(GetAddress)来收集它们,以便以后可以将它们存储到变量中:
SELECT Email
FROM dbo.MyEmai
我需要代码C#部分的帮助:
SqlCommand cmdMyEmails = new SqlCommand("GetAddress", connection);
cmdMyEmails.CommandType = CommandType.StoredProcedure;
var MyEmails = (string)cmdMyEmails.ExecuteScalar();
这段代码只返回一行,我需要选择表中的所有行并将其存储到MyEmails变量中
我试过这样的方法,但还是不走运:
var MyEmails = (cmdMyEmails.ExecuteReader()).ToString();
有人能帮我吗?
我需要选择所有行并将其存储到MyEmails变量中
提前谢谢 只需使用datatable填充其中的数据和ExecuteReader() 更新 您可以使用SqlDataAdapter填充数据集
DataSet ds = new DataSet();
SqlCommand cmdMyEmails = new SqlCommand("GetAddress", connection);
cmdMyEmails.CommandType = CommandType.StoredProcedure;
SqlDataAdapter sda = new SqlDataAdapter()
sda.SelectCommand = cmd;
sda.Fill(ds);
或者使用读卡器获取数据
SqlCommand cmdMyEmails = new SqlCommand("GetAddress", connection);
cmdMyEmails.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string Emailid = reader["Email"].ToString();
}
只需使用datatable填充其中的数据和ExecuteReader() 更新 您可以使用SqlDataAdapter填充数据集
DataSet ds = new DataSet();
SqlCommand cmdMyEmails = new SqlCommand("GetAddress", connection);
cmdMyEmails.CommandType = CommandType.StoredProcedure;
SqlDataAdapter sda = new SqlDataAdapter()
sda.SelectCommand = cmd;
sda.Fill(ds);
或者使用读卡器获取数据
SqlCommand cmdMyEmails = new SqlCommand("GetAddress", connection);
cmdMyEmails.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
string Emailid = reader["Email"].ToString();
}
正如你在这里看到的
var MyEmails=newlist()//I suposse MyEmails是一个电子邮件列表示例
SqlCommand=newsqlcommand(queryString,connection);
SqlDataReader=command.ExecuteReader();
while(reader.Read())
{
MyEmails.Add(newemail(){Email=reader[0].ToString()});//例如
}
您可能想使用以下任何一种:
reader[0].ToString()代码>//如果您知道第0列是包含电子邮件的列
reader[“email”].ToString()代码>//当电子邮件是查询结果的列名时
var MyEmails=newlist()//I suposse MyEmails是一个电子邮件列表示例
SqlCommand=newsqlcommand(queryString,connection);
SqlDataReader=command.ExecuteReader();
while(reader.Read())
{
MyEmails.Add(newemail(){Email=reader[0].ToString()});//例如
}
您可能想使用以下任何一种:
reader[0].ToString()代码>//如果您知道第0列是包含电子邮件的列
reader[“email”].ToString()代码>//当电子邮件是查询结果的列名时
只需使用此语句更改SQL语句,就可以将所有地址作为一个值来获取,并用“;”分隔,因此,您无需更改一行C代码: 如果您使用的是比SQL Server 2017更早的SQL,则string_agg函数不可用,因此需要使用此技巧(使用XML内置函数):
不要随意尝试,请查看ADO.NET教程。读卡器是将读取结果的读卡器。不是结果本身,而是函数ExecuteScalar=>执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行被忽略。@freej17否,您需要ADO.NET教程和/或课程。你可以在微软的文档网站上找到很多很好的教程。您可以通过同样免费的Visual Studio Dev Essentials访问Pluralsight的课程,为期3个月program@freej17使用Dapper Framework for SQL,只需在Google上搜索
ADO.NET ExecuteReader()
就会作为第一个结果返回,相信我,您再也不会切换到传统的SqlCommand格式了。Dapper是Stackoverflow开发的,只是为了帮助像我们这样的开发人员!不要随意尝试,请查看ADO.NET教程。读卡器是将读取结果的读卡器。不是结果本身,而是函数ExecuteScalar=>执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行被忽略。@freej17否,您需要ADO.NET教程和/或课程。你可以在微软的文档网站上找到很多很好的教程。您可以通过同样免费的Visual Studio Dev Essentials访问Pluralsight的课程,为期3个月program@freej17使用Dapper Framework for SQL,只需在Google上搜索ADO.NET ExecuteReader()
就会作为第一个结果返回,相信我,您再也不会切换到传统的SqlCommand格式了。Dapper是Stackoverflow开发的,只是为了帮助像我们这样的开发人员!这看起来是最好的解决方案。我还有一个问题。我应该在此代码之前将电子邮件声明为命名空间吗?此代码位于webmethod中。Post MyEmails代码plz。首先想一想你想要MyEmails的目的是什么这看起来是最好的解决方案。我还有一个问题。我应该在此代码之前将电子邮件声明为命名空间吗?此代码位于webmethod中。Post MyEmails代码plz。首先想一想,您希望MyEmails instanceProcedure或函数“GetAddress”需要参数“@Email”,而该参数未提供。我想我需要改变代码毕竟:你能帮我吗@马克Guillot@freej17我已经更改了这两个查询,因此您可以像原始查询一样通过电子邮件获得结果。请再试一次。感谢您的回答:)我使用的是旧版本,所以我尝试了第二个查询。因为@Email,我需要在C#中进行某种代码更改。电子邮件现在是一个输出参数吗?是一个输出列,就像您在原始帖子中显示的查询一样。选择来自dbo的电子邮件。MyEmai@freej17我希望您需要编写代码的唯一区别是将GetAddress上的电子邮件参数的大小扩展为较大的值,如varchar(4000),这样它现在可以包含多个连接在单个字符串上的地址。过程或函数“GetAddress”需要参数“@Email”,没有提供。我想我需要改变代码毕竟:你能帮我吗@马克Guillot@freej17我已更改了两个查询,因此您将
select string_agg(Email, ';') as Email
from dbo.MyEmail
select (select @Email + ';'
from dbo.MyEmail
for xml path('')) as Email