在c#asp.net中执行查询

时间:2012-08-06 02:31:21

标签: asp.net sql c#-4.0

我创建了一个查询,用于从消息数据库中选择消息正文。我不知道如何执行它来获取身体字符串并存储它。我尝试过使用ExecuteReader,ExecuteScalar和ExecuteNonQuery。他们都没有工作。 ExecuteScalar最接近工作,但它只返回第一行消息的主体,无论你试图查看哪一行。有人知道怎么做吗?这是一个简单的解决方案。

  SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID=               MessageID", conn);
  com.Connection = conn;
  com.Connection.Open();
  String body;
  body = com.ExecuteScalar.ToString;

这就是我现在所拥有的。提前谢谢!

4 个答案:

答案 0 :(得分:4)

您的查询中的messageId是什么?你应该做这样的事情

SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID = @MessageId");
com.Parameters.AddWithValue("@MessageId", 1); //Replace 1 with messageid you want to get
string s = com.ExecuteScalar().ToString()

答案 1 :(得分:2)

您可以使用SQLDataAdapter和Datatable:

SqlCommand com = new SqlCommand("SELECT MessageID,Body FROM Messages WHERE MessageID=               MessageID", conn);
SqlDataAdapter dadapter=new SqlDataAdapter();
DataTable dt = new DataTable();
  com.Connection = conn;
  com.Connection.Open();
  String body;
  dadapter.SelectCommand=com;
  dadapter.Fill(dt);
  body = dr.Rows["Body"].toString();

答案 2 :(得分:1)

你应该尝试这样的事情。

 SqlCommand com = new SqlCommand("SELECT Body FROM Messages WHERE MessageID=              MessageID", conn);
com.Connection = conn;
com.Connection.Open();
String body;
SqlDataReader dr = com.ExecuteReader();
if(dr.HasRows){
while(dr.Read()){
 body+=dr["Body"].ToString();  
  }
}

我希望这适合你。

答案 3 :(得分:0)

根据您在下面对Nudier的回复,您尝试使用WHERE MessageID = MessageID

传递所选邮件的messageID

这不起作用的原因,以及你总是得到第一行返回的原因是SQL不知道MessageID是你试图传入的变量。就SQL而言,MessageID是一个列名,所以你要求SQL做的就是选择列MessageID =列MessageID的行“Body”,所以MessageID等于它自己,它总是等于true。由于ExecuteScalar总是返回第一行的第一个单元格,因此查询将始终返回Messages表中的所有行,而executeScalar将获取第一个单元格。

希望这有意义,如果没有,只需复制你的查询并针对你的SQL数据库运行它,你应该看到我的意思是返回所有行,因为where子句总是等于true。

要解决此问题,您需要考虑Anuraj关于添加参数的内容。

要将变量传递给代码中的SQL字符串,需要对其进行参数化,然后添加相关参数,以便SQL成为:

SELECT Body FROM Messages WHERE MessageID=@MessageID

(注意在参数名称前加上@符号?)

在该行的正下方,您需要使用以下代码在代码中添加参数:

com.AddParameterWithValue("@MessageId", MessageId);

(我认为这是对的,我是从Anuraj复制的,我通常做的略有不同)

再次,为了看到这个工作,您可以使用

使用参数直接对数据库运行它
DECLARE @messsageID AS INTEGER
SET @messageID = 1
SELECT Body FROM Messages WHERE MessageID=@messageID

请阅读此内容以获取更多详情(或者如果我没有完全清楚)http://www.csharp-station.com/Tutorial/AdoDotNet/lesson06