我创建了一个查询,用于从消息数据库中选择消息正文。我不知道如何执行它来获取身体字符串并存储它。我尝试过使用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;
这就是我现在所拥有的。提前谢谢!
答案 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
这不起作用的原因,以及你总是得到第一行返回的原因是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